├── .nvmrc ├── .npmrc ├── docs ├── icon.png ├── style.css └── index.html ├── .dockerignore ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── package.json ├── README.md ├── server.js ├── lib ├── store.js └── engine.js ├── test └── all.js └── yarn.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | 7.8 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact = true 2 | -------------------------------------------------------------------------------- /docs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/statico/memorybot/HEAD/docs/icon.png -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | npm-debug.log 4 | data 5 | docs 6 | .env 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | npm-debug.log 4 | data 5 | coverage 6 | .env 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | after_script: npm run -s coverage && npm run -s coveralls 3 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | ENV NODE_VERSION 7.8.0 4 | ADD https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz /node.tar.gz 5 | RUN tar -xzf /node.tar.gz -C /usr/local --strip-components=1 && rm /node.tar.gz 6 | 7 | ADD https://yarnpkg.com/latest.tar.gz /yarn.tar.gz 8 | RUN mkdir -p /yarn && tar -xzf /yarn.tar.gz -C /yarn --strip-components=1 && rm /yarn.tar.gz 9 | 10 | RUN mkdir /memorybot 11 | WORKDIR /memorybot 12 | 13 | COPY package.json ./ 14 | RUN /yarn/bin/yarn install --pure-lockfile 15 | 16 | COPY lib/ ./lib/ 17 | COPY server.js ./ 18 | 19 | ENV DATA_DIR /data 20 | VOLUME /data 21 | 22 | CMD ["npm", "run", "-s", "start"] 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2017 Ian Langworth 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | 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 THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "memorybot", 3 | "version": "1.2.4", 4 | "description": "An infobot-inspired Slack bot that remembers things", 5 | "author": "Ian Langworth ", 6 | "license": "MIT", 7 | "keywords": [ 8 | "slack", 9 | "bot", 10 | "infobot" 11 | ], 12 | "directories": { 13 | "doc": "docs", 14 | "lib": "lib" 15 | }, 16 | "scripts": { 17 | "start": "babel-node server.js", 18 | "dev": "nodemon -x babel-node server.js", 19 | "test": "mocha --require babel-polyfill --compilers js:babel-register && standard | snazzy", 20 | "lint": "standard | snazzy", 21 | "coverage": "babel-node ./node_modules/istanbul/lib/cli.js cover node_modules/mocha/bin/_mocha -- test", 22 | "coveralls": "istanbul-coveralls" 23 | }, 24 | "babel": { 25 | "presets": [ 26 | "env" 27 | ] 28 | }, 29 | "homepage": "https://statico.github.io/memorybot/", 30 | "repository": { 31 | "type": "git", 32 | "url": "git+https://github.com/statico/memorybot.git" 33 | }, 34 | "bugs": { 35 | "url": "https://github.com/statico/memorybot/issues" 36 | }, 37 | "dependencies": { 38 | "botkit": "^0.5.4", 39 | "chai": "3.5.0", 40 | "denodeify": "1.2.1", 41 | "dotenv": "4.0.0", 42 | "graceful-fs": "4.1.11", 43 | "html-entities": "^1.2.1", 44 | "mocha": "^3.3.0", 45 | "random-js": "1.0.8", 46 | "sqlite": "^2.7.0", 47 | "winston": "^2.3.1" 48 | }, 49 | "devDependencies": { 50 | "babel-cli": "^6.24.1", 51 | "babel-core": "^6.24.1", 52 | "babel-preset-env": "^1.4.0", 53 | "coveralls": "^2.13.1", 54 | "istanbul": "1.0.0-alpha.2", 55 | "istanbul-coveralls": "1.0.3", 56 | "mocha-lcov-reporter": "^1.3.0", 57 | "snazzy": "^7.0.0", 58 | "standard": "^10.0.2", 59 | "winston-memory": "0.1.0" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /docs/style.css: -------------------------------------------------------------------------------- 1 | /* Space out content a bit */ 2 | body { 3 | padding-top: 1.5rem; 4 | padding-bottom: 1.5rem; 5 | } 6 | 7 | /* Everything but the jumbotron gets side spacing for mobile first views */ 8 | .header, 9 | .marketing, 10 | .footer { 11 | padding-right: 1rem; 12 | padding-left: 1rem; 13 | } 14 | 15 | /* Custom page header */ 16 | .header { 17 | padding-bottom: 1rem; 18 | border-bottom: .05rem solid #e5e5e5; 19 | } 20 | /* Make the masthead heading the same height as the navigation */ 21 | .header h3 { 22 | margin-top: 0; 23 | margin-bottom: 0; 24 | line-height: 3rem; 25 | } 26 | 27 | /* Custom page footer */ 28 | .footer { 29 | padding-top: 1.5rem; 30 | color: #777; 31 | border-top: .05rem solid #e5e5e5; 32 | } 33 | 34 | /* Customize container */ 35 | @media (min-width: 48em) { 36 | .container { 37 | max-width: 46rem; 38 | } 39 | } 40 | .container-narrow > hr { 41 | margin: 2rem 0; 42 | } 43 | 44 | /* Main marketing message and sign up button */ 45 | .jumbotron { 46 | text-align: center; 47 | border-bottom: .05rem solid #e5e5e5; 48 | } 49 | .jumbotron .btn { 50 | padding: .75rem 1.5rem; 51 | font-size: 1.5rem; 52 | } 53 | 54 | /* Supporting marketing content */ 55 | .marketing { 56 | margin: 3rem 0; 57 | } 58 | .marketing p + h4 { 59 | margin-top: 1.5rem; 60 | } 61 | 62 | /* Responsive: Portrait tablets and up */ 63 | @media screen and (min-width: 48em) { 64 | /* Remove the padding we set earlier */ 65 | .header, 66 | .marketing, 67 | .footer { 68 | padding-right: 0; 69 | padding-left: 0; 70 | } 71 | /* Space out the masthead */ 72 | .header { 73 | margin-bottom: 2rem; 74 | } 75 | /* Remove the bottom border on the jumbotron for visual effect */ 76 | .jumbotron { 77 | border-bottom: 0; 78 | } 79 | } 80 | 81 | /* Memorybot styles */ 82 | body { 83 | font-family: 'Lato', -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; 84 | } 85 | span.you, span.membot { 86 | display: block; 87 | padding-left: 1em; 88 | text-indent: -1em; 89 | } 90 | span.you b, span.membot b { 91 | margin-right: 0.5em; 92 | } 93 | span.you b { 94 | color: #8e44ad; 95 | } 96 | span.you.a b { 97 | color: #d35400; 98 | } 99 | span.you.b b { 100 | color: #2980b9; 101 | } 102 | span.membot b { 103 | color: #16a085; 104 | } 105 | span.address { 106 | color: #3498db; 107 | } 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![cute robot icon](https://statico.github.io/memorybot/icon.png) 2 | 3 | # memorybot 4 | 5 | [![Travis](https://img.shields.io/travis/statico/memorybot.svg?style=flat-square)](https://travis-ci.org/statico/memorybot) 6 | [![issues](https://img.shields.io/github/issues/statico/memorybot.svg?style=flat-square)](https://github.com/statico/memorybot/issues) 7 | [![Coveralls](https://img.shields.io/coveralls/statico/memorybot.svg?style=flat-square)](https://coveralls.io/github/statico/memorybot) 8 | [![license](https://img.shields.io/github/license/statico/memorybot.svg?style=flat-square)](https://github.com/statico/memorybot/blob/master/LICENSE) 9 | [![Docker](https://img.shields.io/docker/automated/statico/memorybot.svg?style=flat-square)](https://hub.docker.com/r/statico/memorybot/) 10 | 11 | ## How to use it 12 | 13 | Check out the documentation on [https://statico.github.io/memorybot/](https://statico.github.io/memorybot/) 14 | 15 | ## How to install it 16 | 17 | You will have to host and run memorybot yourself. There is no "Add to Slack" button because hosting bots costs money. Also, memorybot needs to listen to all of the chat messages on rooms you invite it to, so you probably don't want to send your Slack team's chat messages to some random server that you don't trust. 18 | 19 | ### 1. Create a new bot integration for your team 20 | 21 | 1. Go to [https://my.slack.com/services/new/bot](https://my.slack.com/services/new/bot) 22 | 1. Give it a nice name, like `@membot` or `@bender` or `@hal9000` or `@glados` 23 | 1. Maybe give it an icon. Check out the [free Robots Expression icons](https://www.iconfinder.com/iconsets/robots-expression) by Graphiqa Stock. 24 | 1. Save the API token for later. It should begin with `xoxb-`. 25 | 26 | ### 2a. Run memorybot with Docker 27 | 28 | ``` 29 | $ mkdir /path/to/data 30 | $ docker run --name memorybot -v /path/to/data:/data -e SLACK_TOKEN=xoxb-xxxxx statico/memorybot 31 | ```` 32 | 33 | ### 2b. Run memorybot as a standalone application 34 | 35 | ``` 36 | $ mkdir data 37 | $ npm install 38 | $ echo "SLACK_TOKEN=xob-xxxxx" >>.env 39 | $ echo "DATA_DIR=data" >>.env 40 | $ npm run -s start 41 | ``` 42 | 43 | ## Feature requests & bugs? 44 | 45 | Please [file a GitHub issue](https://github.com/statico/memorybot/issues) or [create a Pull Request](https://github.com/statico/memorybot/pulls). 46 | 47 | ## Credits 48 | 49 | - [infobot](http://infobot.org/) is a project by kevin lenzo 50 | - [Fun android icon](https://www.iconfinder.com/icons/385841/) by [Graphiqa Stock](https://www.iconfinder.com/graphiqa) 51 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | import Botkit from 'botkit' 2 | import winston from 'winston' 3 | import denodeify from 'denodeify' 4 | 5 | import {SQLiteStore} from './lib/store' 6 | import {MemoryBotEngine} from './lib/engine' 7 | 8 | require('dotenv').config() // Read .env for local dev 9 | 10 | const log = winston 11 | log.remove(winston.transports.Console) 12 | log.add(winston.transports.Console, {timestamp: true, level: 'debug'}) 13 | 14 | for (let name of ['SLACK_TOKEN', 'DATA_DIR']) { 15 | if (!process.env[name]) { 16 | throw new Error(`Missing ${name} environment variable`) 17 | } 18 | } 19 | 20 | const store = new SQLiteStore(process.env.DATA_DIR) 21 | const engine = new MemoryBotEngine(store) 22 | const controller = Botkit.slackbot({ 23 | debug: process.env.DEBUG_SLACK, 24 | send_via_rtm: true 25 | }) 26 | 27 | controller.on('hello', async (bot, _) => { 28 | let team = bot.team_info.id 29 | await store.initialize(team) 30 | await store.updateBotMetadata(bot) 31 | }) 32 | 33 | controller.on('direct_mention', async (bot, msg) => { 34 | handleMessage(bot, msg.user, msg.channel, true, msg.text) 35 | }) 36 | 37 | controller.on('direct_message', async (bot, msg) => { 38 | handleMessage(bot, msg.user, msg.channel, true, msg.text) 39 | }) 40 | 41 | controller.on('me_message', async (bot, msg) => { 42 | handleMessage(bot, msg.user, msg.channel, false, msg.text) 43 | }) 44 | 45 | controller.on('ambient', async (bot, msg) => { 46 | let name = bot.identity ? bot.identity.name.toLowerCase() : null 47 | let {text} = msg 48 | // Sometimes users might say "membot hey" or "membot: hey" instead of "@membot hey" 49 | if (text.toLowerCase().startsWith(`${name} `) || text.toLowerCase().startsWith(`${name}: `)) { 50 | text = text.substr(name.length + 1).replace(/^:\s+/, '') 51 | handleMessage(bot, msg.user, msg.channel, true, text) 52 | } else { 53 | handleMessage(bot, msg.user, msg.channel, false, text) 54 | } 55 | }) 56 | 57 | // Cache Slack user IDs to names in memory. 58 | let userIdsToNames = {} 59 | 60 | async function handleMessage (bot, sender, channel, isDirect, msg) { 61 | if (sender === bot.identity.id) return 62 | try { 63 | if (sender in userIdsToNames) { 64 | await engine.handleMessage(bot, userIdsToNames[sender], channel, isDirect, msg) 65 | } else { 66 | let data = await denodeify(bot.api.users.info.bind(bot.api.users))({user: sender}) 67 | let name = data ? data.user.name : sender 68 | userIdsToNames[sender] = name 69 | await engine.handleMessage(bot, name, channel, isDirect, msg) 70 | } 71 | } catch (err) { 72 | log.error(`handleMessage failed: ${err}`) 73 | } 74 | } 75 | 76 | log.info('Starting memorybot...') 77 | const bot = controller.spawn({token: process.env.SLACK_TOKEN}) 78 | function startRTM () { 79 | bot.startRTM((err) => { 80 | if (err) { 81 | log.error(`Failed to start Slack RTM: ${err}`) 82 | setTimeout(startRTM, 30 * 1000) 83 | } else { 84 | log.info(`Successfully started Slack RTM`) 85 | } 86 | }) 87 | } 88 | controller.on('rtm_close', startRTM) 89 | startRTM() 90 | -------------------------------------------------------------------------------- /lib/store.js: -------------------------------------------------------------------------------- 1 | import sqlite from 'sqlite' 2 | import winston from 'winston' 3 | import {join} from 'path' 4 | 5 | const log = winston 6 | const debug = process.env.DEBUG ? () => { log.debug(...arguments) } : () => {} 7 | 8 | export class SQLiteStore { 9 | constructor (dataDir) { 10 | this.dataDir = dataDir 11 | if (!this.dataDir) throw new Error('dataDir argument must be set') 12 | } 13 | 14 | async initialize (team) { 15 | let db = await this.getDatabase(team) 16 | 17 | try { 18 | await db.get('SELECT COUNT(*) FROM metadata') 19 | } catch (err) { 20 | await db.run('CREATE TABLE metadata (key TEXT PRIMARY KEY COLLATE NOCASE, value TEXT)') 21 | await db.run('CREATE TABLE factoids (key TEXT PRIMARY KEY COLLATE NOCASE, value TEXT, last_edit TEXT)') 22 | await db.run('CREATE TABLE karma (key TEXT PRIMARY KEY COLLATE NOCASE, value INTEGER)') 23 | await db.run("INSERT INTO metadata VALUES('direct', 'no')") 24 | await db.run("INSERT INTO metadata VALUES('ambient', 'yes')") 25 | await db.run("INSERT INTO metadata VALUES('verbose', 'no')") 26 | await db.run("INSERT INTO factoids VALUES('Slack', 'is a cool way to talk to your team', 'by nobody')") 27 | await db.run("INSERT INTO factoids VALUES('the internet', 'is a great source of cat pictures', 'by nobody')") 28 | await db.run("INSERT INTO factoids VALUES('licks the bot', 'is exudes a foul oil', 'by nobody')") 29 | await db.run("INSERT INTO karma VALUES('memorybot', 42)") 30 | log.info(`Successfully initialized database for team ${team}`) 31 | } 32 | } 33 | 34 | async getDatabase (team) { 35 | if (!team) throw new Error('team is undefined') 36 | return sqlite.open(join(this.dataDir, team), {verbose: true}) 37 | } 38 | 39 | async getMetaData (team, key) { 40 | debug(`getting metadata ${JSON.stringify(key)}`) 41 | let db = await this.getDatabase(team) 42 | let {value} = await db.get('SELECT value FROM metadata WHERE key = $key', {$key: key}) 43 | return (value === 'yes') ? true : (value === 'no') ? false : value 44 | } 45 | 46 | async setMetaData (team, key, value) { 47 | debug(`setting metadata ${JSON.stringify(key)} to ${JSON.stringify(value)}`) 48 | let db = await this.getDatabase(team) 49 | 50 | value = (value === true) ? 'yes' : (value === false) ? 'no' : value 51 | 52 | await db.run('INSERT OR REPLACE INTO metadata VALUES($key, $value)', {$key: key, $value: value}) 53 | log.info(`Set metadata key ${key} for team ${team} with existing table`) 54 | } 55 | 56 | async updateBotMetadata (bot) { 57 | let team = bot.team_info.id 58 | let db = await this.getDatabase(team) 59 | 60 | if (bot.mbMeta == null) bot.mbMeta = {} 61 | let rows = await db.all('SELECT key, value FROM metadata') 62 | for (let {key, value} of rows) { 63 | bot.mbMeta[key] = (value === 'yes') ? true : (value === 'no') ? false : value 64 | } 65 | 66 | debug('Bot metadata is:', bot.mbMeta) 67 | } 68 | 69 | async countFactoids (team) { 70 | let db = await this.getDatabase(team) 71 | let row = await db.get('SELECT COUNT(*) AS count FROM factoids') 72 | return row ? row.count : null 73 | } 74 | 75 | async getFactoid (team, key) { 76 | debug(`getting factoid ${JSON.stringify(key)}`) 77 | let db = await this.getDatabase(team) 78 | 79 | let row = await db.get('SELECT value FROM factoids WHERE key = $key', {$key: key}) 80 | if (row) return row.value 81 | 82 | row = await db.get('SELECT value FROM factoids WHERE key = $key', {$key: `the ${key}`}) 83 | return row ? row.value : null 84 | } 85 | 86 | async setFactoid (team, key, value, lastEdit) { 87 | debug(`setting factoid ${JSON.stringify(key)} to ${JSON.stringify(value)}`) 88 | let db = await this.getDatabase(team) 89 | 90 | await db.run('INSERT OR REPLACE INTO factoids VALUES($key, $value, $lastEdit)', {$key: key, $value: value, $lastEdit: lastEdit}) 91 | debug(`Set factoid key ${key} for team ${team}`) 92 | } 93 | 94 | async deleteFactoid (team, key) { 95 | debug(`deleting factoid ${JSON.stringify(key)}`) 96 | let db = await this.getDatabase(team) 97 | 98 | await db.run('DELETE FROM factoids WHERE key = $key', {$key: key}) 99 | debug(`Deleted factoid key ${key} for team ${team}`) 100 | } 101 | 102 | async getKarma (team, key) { 103 | debug(`getting karma ${JSON.stringify(key)}`) 104 | let db = await this.getDatabase(team) 105 | 106 | let row = await db.get('SELECT value FROM karma WHERE key = $key', {$key: key}) 107 | return row ? row.value : null 108 | } 109 | 110 | async setKarma (team, key, value) { 111 | debug(`setting karma ${JSON.stringify(key)} to ${JSON.stringify(value)}`) 112 | let db = await this.getDatabase(team) 113 | 114 | await db.run('INSERT OR REPLACE INTO karma VALUES($key, $value)', {$key: key, $value: value}) 115 | debug(`Set karma for ${key} for team ${team}`) 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | memorybot - an infobot-inspired Slack bot that remembers things 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 |
29 |

30 | cute picture of a robot 31 |
32 | memorybot 33 |

34 |

35 | An infobot-inspired Slack bot that remembers things. 36 |

37 |

Install it now

38 |
39 | 40 |
41 |
42 |

It remembers things said in chat and recalls them later.

43 |
44 |
45 | You The internet is a great place for cat pictures 46 | You What is the internet? 47 | membot the internet is a great place for cat pictures 48 |
49 |
50 | 51 |
52 |
53 |

You can append to existing factoids.

54 |
55 |
56 | You GIF is pronounced like "gift" 57 | You GIF is also pronounced like "jiffy" 58 | You GIF? 59 | membot GIF is pronounced like "gift" or pronounced like "jiffy" 60 |
61 |
62 | 63 |
64 |
65 |

You can replace existing factoids.

66 |
67 |
68 | You no, GIF is pronounced however you want it to be! 69 | You GIF? 70 | membot GIF is pronounced however you want it to be! 71 |
72 |
73 | 74 |
75 |
76 |

You can forget factoids.

77 |
78 |
79 | You @membot forget gif 80 | membot OK, I forgot about gif 81 | You What is GIF? 82 | membot I have no idea. 83 |
84 |
85 | 86 |
87 |
88 |

You can ask it to tell people about things privately.

89 |
90 |
91 | Alice who are we talking about? 92 | You tell Alice about he who must not be named 93 |
94 |
95 | 96 |
97 |
98 |

You can make it choose a random response.

99 |
100 |
101 | You Schrodinger's cat is very happy | not happy at all 102 | You Schrodinger's cat? 103 | membot Schrodinger's cat is not happy at all 104 | You Schrodinger's cat? 105 | membot Schrodinger's cat is very happy 106 |
107 |
108 | 109 |
110 |
111 |

You can see what a factoid is literally.

112 |
113 |
114 | You literal Schrodinger's cat 115 | membot Schrodinger's cat is very happy | not happy at all 116 |
117 |
118 | 119 |
120 |
121 |

You can hide the subject when it replies.

122 |
123 |
124 | You hodor is <reply>hodor! 125 | You hodor? 126 | membot hodor! 127 |
128 |
129 | 130 |
131 |
132 |

You can make it not reply to certain things.

133 |
134 |
135 | You don't reply is <reply> 136 | You don't reply? 137 |
138 |
139 | 140 |
141 |
142 |

You can make it reply with actions.

143 |
144 |
145 | You licks membot is <action> exudes a foul oil 146 | You /me licks membot 147 | membot exudes a foul oil 148 |
149 |
150 | 151 |
152 |
153 |

You can use the sender's name in the reply.

154 |
155 |
156 | Alice ice cream is $who's favorite treat 157 | Alice ice cream? 158 | membot ice cream is Alice's favorite treat 159 |
160 |
161 | 162 |
163 |
164 |

You can express your like or dislike about things.

165 |
166 |
167 | You kittens++ 168 | Alice kittens++ # so cute! 169 | Bob kittens-- 170 | You karma for kittens? 171 | membot kittens has 1 karma 172 |
173 |
174 | 175 |
176 |
177 |

You can make it require addressing to learn things.

178 |
179 |
180 | You @membot disable setting ambient 181 | membot OK, I will no longer learn factoids without being told explicitly. 182 | You foo is bar 183 | You foo? 184 | membot No idea. 185 |
186 |
187 | 188 |
189 |
190 |

You can make it require addressing to respond to things.

191 |
192 |
193 | You @membot enable setting direct 194 | membot OK, I won't reply unless spoken to. 195 | You kittens? 196 | Alice hmmm, nothing happened 197 | You @membot kittens? 198 | membot kittens are super cute 199 | Alice membot what are kittens? 200 | membot kittens are super cute 201 |
202 |
203 | 204 |
205 |

Install it now

206 |
207 | 208 | 217 | 218 |
219 | 220 | Fork me on GitHub 221 | 222 | 223 | 224 | -------------------------------------------------------------------------------- /lib/engine.js: -------------------------------------------------------------------------------- 1 | import Random from 'random-js' 2 | import denodeify from 'denodeify' 3 | import winston from 'winston' 4 | import {AllHtmlEntities as Entities} from 'html-entities' 5 | 6 | import {version as VERSION} from '../package.json' 7 | 8 | const log = winston 9 | 10 | const MAX_FACTOID_SIZE = Number(process.env.MAX_FACTOID_SIZE || 2048) 11 | 12 | const I_DONT_KNOW = [ 13 | "I don't know what that is.", 14 | 'I have no idea.', 15 | 'No idea.', 16 | "I don't know." 17 | ] 18 | 19 | const OKAY = [ 20 | 'OK, got it.', 21 | 'I got it.', 22 | 'Understood.', 23 | 'Gotcha.', 24 | 'OK' 25 | ] 26 | 27 | const GREETINGS = [ 28 | 'Heya, $who!', 29 | 'Hi $who!', 30 | 'Hello, $who', 31 | 'Hello, $who!', 32 | 'Greetings, $who' 33 | ] 34 | 35 | const ACKNOWLEDGEMENTS = [ 36 | 'Yes?', 37 | 'Yep?', 38 | 'Yeah?' 39 | ] 40 | 41 | const IGNORED_FACTOIDS = [ 42 | 'he', 43 | 'help', 44 | 'hers', 45 | 'his', 46 | 'huh', 47 | 'it', 48 | "it's", 49 | 'its', 50 | 'she', 51 | 'settings', 52 | 'status', 53 | 'that', 54 | 'them', 55 | 'there', 56 | 'these', 57 | 'they', 58 | 'this', 59 | 'those', 60 | 'what', 61 | 'when', 62 | 'where', 63 | 'which', 64 | 'who', 65 | 'why' 66 | ] 67 | 68 | export class MemoryBotEngine { 69 | constructor (store) { 70 | this.store = store 71 | this.userIdsToNames = {} 72 | this._random = new Random() 73 | } 74 | 75 | oneOf () { 76 | let arr 77 | if (Array.isArray(arguments[0])) { 78 | arr = arguments[0] 79 | } else { 80 | arr = arguments 81 | } 82 | return this._random.pick(arr) 83 | } 84 | 85 | async handleMessage (bot, sender, channel, isDirect, msg) { 86 | // Ignore ourself. 87 | if (sender === bot.identity.id || sender === bot.identity.name) return 88 | 89 | const {mbMeta} = bot 90 | const team = bot.identifyTeam() 91 | const shouldLearn = isDirect || mbMeta.ambient // Should we be learning factoids? 92 | const shouldReply = isDirect || !mbMeta.direct // Should we reply to this? 93 | const isVerbose = mbMeta.verbose // TODO: Combine with shouldLearn 94 | 95 | // Sometimes Slack sends HTML entities. 96 | msg = Entities.decode(msg) 97 | 98 | // Basic input sanitization. 99 | msg = msg.substr(0, MAX_FACTOID_SIZE).trim().replace(/\0/g, '').replace(/\n/g, ' ') 100 | 101 | // Simple reply helper. 102 | const reply = text => bot.reply({channel}, {text}) 103 | 104 | // Used to parse a factoid's contents and reply with it. 105 | const parseAndReply = async (key, value, tell = null) => { 106 | // Factoids are stored as { key: "foo", value: "is bar" } 107 | let [, verb, rest] = Array.from(value.match(/^(is|are)\s+(.*)/i)) 108 | value = rest 109 | 110 | // Split on |, but don't split on \|. Use an HTML entity as a separator. 111 | value = value.replace(/\\\|/g, '\\|') 112 | value = this.oneOf(value.split(/\|/i)).trim() 113 | value = value.replace(/|/g, '|') 114 | 115 | const isReply = (/^\s*/i).test(value) 116 | if (isReply) value = value.replace(/^\s*/i, '') 117 | 118 | const isEmote = (/^\s*/i).test(value) 119 | if (isEmote) value = value.replace(/^\s*/i, '') 120 | 121 | value = value.replace(/\$who/ig, sender) 122 | 123 | if (tell) { 124 | bot.reply({channel: tell}, {text: `${sender} wants you to know: ${key} is ${value}`}) 125 | } else if (isReply) { 126 | if (value && value !== '') reply(value) 127 | } else if (isEmote) { 128 | await denodeify(bot.api.callAPI.bind(bot.api))('chat.meMessage', {channel, text: value}) 129 | } else { 130 | reply(`${key} ${verb} ${value}`) 131 | } 132 | } 133 | 134 | // Used to update a factoid and reply. 135 | const update = async (key, value) => { 136 | // Escape Slack @-groups. (When a user types '@here' we get ''.) 137 | value = value.replace(//ig, (_, x) => '`@' + x + '`') 138 | 139 | const lastEdit = `on ${new Date()} by ${sender}` 140 | await this.store.setFactoid(team, key, value, lastEdit) 141 | if (isVerbose || isDirect) reply(this.oneOf(OKAY)) 142 | } 143 | 144 | // Status 145 | if (isDirect && (/^(?:status|settings)\??/ig).test(msg)) { 146 | const bool = x => x ? ':ballot_box_with_check:' : ':white_medium_square:' 147 | let count = await this.store.countFactoids(team) 148 | reply(`\ 149 | *Status* 150 | I am memorybot v${VERSION} - https://statico.github.com/memorybot/ 151 | I am currently remembering ${count} factoids. 152 | *Settings* 153 | ${bool(mbMeta.direct)} \`direct\` - Interactons require direct messages or @-mentions 154 | ${bool(mbMeta.ambient)} \`ambient\` - Learn factoids from ambient room chatter 155 | ${bool(mbMeta.verbose)} \`verbose\` - Make the bot more chatty with confirmations, greetings, etc. 156 | Tell me "enable setting " or "disable setting " to change the above settings.\ 157 | `) 158 | 159 | // Help 160 | } else if (isDirect && (/^help\??/ig).test(msg)) { 161 | reply(`Hi alice, I'm a MemoryBot. I remember things and then recall them later when asked. Check out my home page for more information: https://statico.github.io/memorybot/ -- You can also leave feedback or file bugs on my GitHub issues page: https://github.com/statico/memorybot/issues`) 162 | 163 | // Settings 164 | } else if (isDirect && (/^(enable|disable)\s+setting\s+/i).test(msg)) { 165 | let [action, key] = msg.split(/\s+setting\s+/i) 166 | let value = (action === 'enable') 167 | 168 | let result 169 | switch (key) { 170 | case 'direct': 171 | result = `interactions with me ${value ? 'now' : 'no longer'} require direct messages or @-mentions` 172 | break 173 | case 'ambient': 174 | result = `I ${value ? 'will now' : 'will no longer'} learn factoids without being told explicitly` 175 | break 176 | case 'verbose': 177 | result = `I ${value ? 'will now' : 'will no longer'} be extra chatty` 178 | break 179 | } 180 | 181 | await this.store.setMetaData(team, key, value) 182 | await this.store.updateBotMetadata(bot) 183 | reply(`OK, ${result}.`) 184 | 185 | // A greeting? 186 | } else if ((/^(hey|hi|hello|waves)$/i).test(msg)) { 187 | if (shouldReply || isVerbose) reply(this.oneOf(GREETINGS).replace(/\$who/ig, sender)) 188 | 189 | // Addressing the bot? 190 | } else if (bot.identity && msg.toLowerCase() === `${bot.identity.name.toLowerCase()}?`) { 191 | reply(this.oneOf(ACKNOWLEDGEMENTS)) 192 | 193 | // Getting literal factoids 194 | } else if (shouldReply && (/^literal\s+/i).test(msg)) { 195 | let key = msg.replace(/^literal\s+/i, '') 196 | let current = await this.store.getFactoid(team, key) 197 | if (current != null) { 198 | reply(`${key} ${current}`) 199 | } else { 200 | reply(this.oneOf(I_DONT_KNOW)) 201 | } 202 | 203 | // Getting regular factoids 204 | } else if (shouldReply && (/^wh?at\s+(is|are)\s+/i).test(msg)) { 205 | let key = msg.replace(/^wh?at\s+(is|are)\s+/i, '').replace(/\?+$/, '') 206 | if (IGNORED_FACTOIDS.includes(key.toLowerCase())) return 207 | let current = await this.store.getFactoid(team, key) 208 | if (current != null) { 209 | await parseAndReply(key, current) 210 | } else { 211 | reply(this.oneOf(I_DONT_KNOW)) 212 | } 213 | 214 | // Deleting factoids 215 | } else if (isDirect && (/^forget\s+/i).test(msg)) { 216 | let key = msg.replace(/^forget\s+/i, '') 217 | await this.store.deleteFactoid(team, key) 218 | reply(`OK, I forgot about ${key}`) 219 | 220 | // Tell users about things 221 | } else if ((/^tell\s+\S+\s+about\s+/i).test(msg)) { 222 | let res = null 223 | try { 224 | res = await denodeify(bot.api.users.list.bind(bot.api.users))({}) 225 | } catch (err) { 226 | log.error(err) 227 | reply('There was an error while downloading the list of users. Please try again.') 228 | return 229 | } 230 | 231 | msg = msg.replace(/^tell\s+/i, '') 232 | let [targetName, ...parts] = msg.split(/\s*about\s*/i) 233 | let key = parts.join(' ') 234 | 235 | let match = targetName.match(/^<@(\w+)>$/) 236 | let targetID = match ? match[1] : null 237 | if (!targetID) { 238 | for (let {id, name} of res.members) { 239 | this.userIdsToNames[id] = name 240 | if (name === targetName) { 241 | targetID = id 242 | } 243 | } 244 | } 245 | 246 | if (targetID === null) { 247 | reply(`I don't know who ${targetName} is.`) 248 | return 249 | } 250 | 251 | let value = await this.store.getFactoid(team, key) 252 | if (value == null) { 253 | reply(this.oneOf(I_DONT_KNOW)) 254 | return 255 | } 256 | 257 | try { 258 | res = await denodeify(bot.api.im.open.bind(bot.api.im))({user: targetID}) 259 | } catch (err) { 260 | log.error(err) 261 | reply(`I could not start an IM session with ${targetName}. Please try again.`) 262 | return 263 | } 264 | 265 | let targetChannel = res.channel ? res.channel.id : null 266 | if (isVerbose) reply(`OK, I told ${targetName} about ${key}`) 267 | await parseAndReply(key, value, targetChannel) 268 | 269 | // Karma query 270 | } else if ((/^karma\s+(for\s+)?/i).test(msg)) { 271 | let key = msg.replace(/^karma\s+(for\s+)?/i, '').replace(/\?+$/, '') 272 | let current = await this.store.getKarma(team, key) 273 | if (!current) current = 0 274 | reply(`${key} has ${current} karma`) 275 | 276 | // Karma increment 277 | } else if (/\+\+(\s#.+)?$/.test(msg)) { 278 | if (isDirect) return reply('You cannot secretly change the karma for something!') 279 | let key = msg.split(/\+\+/)[0] 280 | let current = await this.store.getKarma(team, key) 281 | let value = Number(current || 0) + 1 282 | await this.store.setKarma(team, key, value) 283 | 284 | // Karma decrement 285 | } else if (/--(\s#.+)?$/.test(msg)) { 286 | if (isDirect) return reply('You cannot secretly change the karma for something!') 287 | let key = msg.split(/--/)[0] 288 | let current = await this.store.getKarma(team, key) 289 | let value = Number(current || 0) - 1 290 | await this.store.setKarma(team, key, value) 291 | 292 | // Updating factoids 293 | } else if (shouldLearn && (/\s+(is|are)\s+/i).test(msg)) { 294 | let [, key, verb, value] = msg.match(/^(.+?)\s+(is|are)\s+(.*)/i) 295 | key = key.toLowerCase() 296 | verb = verb.toLowerCase() 297 | 298 | if (IGNORED_FACTOIDS.includes(key)) return 299 | 300 | let isCorrecting = (/no,?\s+/i).test(key) 301 | if (isCorrecting) { key = key.replace(/no,?\s+/i, '') } 302 | 303 | let isAppending = (/also,?\s+/i).test(key) 304 | if (isAppending) { key = key.replace(/also,?\s+/i, '') } 305 | 306 | if (!isAppending) { isAppending = (/also,?\s+/i).test(value) } 307 | if (isAppending) { value = value.replace(/also,?\s+/i, '') } 308 | 309 | key = key.replace(/^but,?\s+/, '') 310 | 311 | let current = await this.store.getFactoid(team, key) 312 | 313 | if (current && current.replace(/^(is|are)\s+/i, '') === value) { 314 | reply(this.oneOf('I already know that.', "I've already got it as that.")) 315 | } else if (current && isCorrecting) { 316 | await update(key, `${verb} ${value}`) 317 | } else if (current && isAppending) { 318 | if (/^\|/.test(value)) { 319 | value = `${current}${value}` 320 | } else { 321 | value = `${current} or ${value}` 322 | } 323 | await update(key, value) 324 | } else if (current) { 325 | current = current.replace(/^(is|are)\s+/i, '') 326 | reply(`But ${key} ${verb} already ${current}`) 327 | } else { 328 | await update(key, `${verb} ${value}`) 329 | } 330 | 331 | // Getting factoids without an interrogative requires addressing 332 | } else if (shouldReply && /\?+$/.test(msg)) { 333 | let key = msg.replace(/\?+$/, '') 334 | if (IGNORED_FACTOIDS.includes(key.toLowerCase())) return 335 | let current = await this.store.getFactoid(team, key) 336 | if (current != null) await parseAndReply(key, current) 337 | 338 | // Getting regular factoids, last chance 339 | } else { 340 | if (IGNORED_FACTOIDS.includes(msg.toLowerCase())) return 341 | let value = await this.store.getFactoid(team, msg) 342 | if (value != null) await parseAndReply(msg, value) 343 | } 344 | } 345 | } 346 | -------------------------------------------------------------------------------- /test/all.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | import Random from 'random-js' 3 | import sqlite from 'sqlite' 4 | import winston from 'winston' 5 | import {assert} from 'chai' 6 | 7 | import {MemoryBotEngine} from '../lib/engine' 8 | import {SQLiteStore} from '../lib/store' 9 | 10 | require('winston-memory') 11 | 12 | const log = winston 13 | log.remove(winston.transports.Console) 14 | log.add(winston.transports.Memory) 15 | 16 | const TESTS = [ 17 | 18 | { 19 | title: 'should get some fun defaults from the start', 20 | script: `\ 21 | alice: what is Slack? 22 | membot: Slack is a cool way to talk to your team 23 | alice: what is the internet? 24 | membot: the internet is a great source of cat pictures 25 | alice licks the bot 26 | membot exudes a foul oil 27 | ` 28 | }, 29 | 30 | { 31 | title: 'should remember things like the docs', 32 | script: `\ 33 | alice: The foo is a great place for cat pictures 34 | ... 35 | alice: What is the foo? 36 | membot: the foo is a great place for cat pictures 37 | ` 38 | }, 39 | 40 | { 41 | title: 'should append things like the docs', 42 | script: `\ 43 | alice: GIF is pronounced like "gift" 44 | ... 45 | alice: GIF is also pronounced like "jiffy" 46 | ... 47 | alice: GIF? 48 | membot: GIF is pronounced like "gift" or pronounced like "jiffy" 49 | ` 50 | }, 51 | 52 | { 53 | title: 'should replace existing factoids like the docs', 54 | script: `\ 55 | alice: GIF is pronounced like "gift" 56 | ... 57 | alice: no, GIF is pronounced however you want it to be! 58 | ... 59 | alice: GIF? 60 | membot: GIF is pronounced however you want it to be! 61 | ` 62 | }, 63 | 64 | { 65 | title: 'should tell us if a factoid is already something else', 66 | script: `\ 67 | alice: foo is bar 68 | ... 69 | alice: foo is baz 70 | membot: But foo is already bar 71 | ` 72 | }, 73 | 74 | { 75 | title: 'should tell us if a factoid is already the same', 76 | script: `\ 77 | alice: foo is bar 78 | ... 79 | alice: foo is bar 80 | membot: I already know that. 81 | alice: no, foo is bar 82 | membot: I've already got it as that. 83 | ` 84 | }, 85 | 86 | { 87 | title: 'should trim "but" from factoids', 88 | script: `\ 89 | alice: what is foo? 90 | membot: No idea. 91 | alice: but foo is bar 92 | ... 93 | alice: what is foo? 94 | membot: foo is bar 95 | ` 96 | }, 97 | 98 | { 99 | title: 'should forget things like the docs', 100 | script: `\ 101 | alice: GIF is pronounced like "gift" 102 | ... 103 | alice: @membot forget gif 104 | membot: OK, I forgot about gif 105 | alice: What is GIF? 106 | membot: No idea. 107 | ` 108 | }, 109 | 110 | { 111 | title: 'should tell people things like the docs', 112 | script: `\ 113 | alice: he who must not be named is Voldemort 114 | ... 115 | bob: who are we talking about? 116 | ... 117 | alice: tell bob about he who must not be named 118 | `, 119 | after: function () { 120 | assert.deepEqual(this.bot._replies, [ 121 | { method: 'im.open', args: { user: '1001' } }, 122 | { 123 | options: { channel: '#im-1001' }, 124 | msg: { text: 'alice wants you to know: he who must not be named is Voldemort' } 125 | } 126 | ]) 127 | } 128 | }, 129 | 130 | { 131 | title: 'should tell people things like the docs (verbose enabled)', 132 | script: `\ 133 | alice: @membot enable setting verbose 134 | membot: OK, I will now be extra chatty. 135 | alice: he who must not be named is Voldemort 136 | membot: Understood. 137 | bob: who are we talking about? 138 | ... 139 | alice: tell bob about he who must not be named 140 | `, 141 | after: function () { 142 | assert.deepEqual(this.bot._replies, [ 143 | { method: 'im.open', args: { user: '1001' } }, 144 | { 145 | options: { channel: '#general' }, 146 | msg: { text: 'OK, I told bob about he who must not be named' } 147 | }, 148 | { 149 | options: { channel: '#im-1001' }, 150 | msg: { text: 'alice wants you to know: he who must not be named is Voldemort' } 151 | } 152 | ]) 153 | } 154 | }, 155 | 156 | { 157 | title: 'should be able to tell facts to people addressed by Slack ID', 158 | script: `\ 159 | alice: @membot enable setting verbose 160 | membot: OK, I will now be extra chatty. 161 | alice: foo is bar 162 | membot: Understood. 163 | alice: tell <@1001> about foo 164 | `, 165 | after: function () { 166 | assert.deepEqual(this.bot._replies, [ 167 | { method: 'im.open', args: { user: '1001' } }, 168 | { 169 | options: { channel: '#general' }, 170 | msg: { text: 'OK, I told <@1001> about foo' } // Slack replaces this with '@bob' 171 | }, 172 | { 173 | options: { channel: '#im-1001' }, 174 | msg: { text: 'alice wants you to know: foo is bar' } 175 | } 176 | ]) 177 | } 178 | }, 179 | 180 | { 181 | title: 'should not be able to tell someone who is not a user', 182 | script: `\ 183 | alice: foo is bar 184 | ... 185 | alice: tell quux about foo 186 | membot: I don't know who quux is. 187 | ` 188 | }, 189 | 190 | { 191 | title: 'should not be able to tell someone something it doesn\'t know about', 192 | script: `\ 193 | alice: tell bob about foo 194 | membot: No idea. 195 | ` 196 | }, 197 | 198 | { 199 | title: 'should return a random result like the docs', 200 | script: `\ 201 | alice: Schrodinger's cat is very happy | not happy at all 202 | ... 203 | alice: Schrodinger's cat? 204 | membot: Schrodinger's cat is very happy 205 | alice: Schrodinger's cat? 206 | membot: Schrodinger's cat is not happy at all 207 | ` 208 | }, 209 | 210 | { 211 | title: 'should be able to roll a die', 212 | script: `\ 213 | alice: roll 1d6 is 1|2|3|4|5|6 214 | ... 215 | alice: roll 1d6? 216 | membot: 1 217 | alice: roll 1d6? 218 | membot: 6 219 | ` 220 | }, 221 | 222 | { 223 | title: 'should not reply to things like the docs', 224 | script: `\ 225 | alice: don't reply is 226 | ... 227 | alice: don't reply? 228 | ... 229 | ` 230 | }, 231 | 232 | { 233 | title: 'should be able to append a random response', 234 | script: `\ 235 | alice: foo is bar 236 | ... 237 | alice: foo is also |baz 238 | ... 239 | alice: foo? 240 | membot: foo is bar 241 | alice: foo? 242 | membot: foo is baz 243 | ` 244 | }, 245 | 246 | { 247 | title: 'should low a literal factoid like the docs', 248 | script: `\ 249 | alice: Schrodinger's cat is very happy | not happy at all 250 | ... 251 | alice: literal Schrodinger's cat 252 | membot: Schrodinger's cat is very happy | not happy at all 253 | ` 254 | }, 255 | 256 | { 257 | title: 'should reply when not knowing about literal factoids', 258 | script: `\ 259 | alice: literal foo? 260 | membot: No idea. 261 | ` 262 | }, 263 | 264 | { 265 | title: 'should hide the subject when replying like the docs', 266 | script: `\ 267 | alice: hodor is hodor! 268 | ... 269 | alice: hodor? 270 | membot: hodor! 271 | ` 272 | }, 273 | 274 | { 275 | title: 'should reply with actions like the docs', 276 | script: `\ 277 | alice: licks membot is exudes a foul oil 278 | ... 279 | alice licks membot 280 | membot exudes a foul oil 281 | ` 282 | }, 283 | 284 | { 285 | title: 'should use the senders name in the reply like the docs', 286 | script: `\ 287 | alice: ice cream is $who's favorite treat 288 | ... 289 | alice: ice cream? 290 | membot: ice cream is alice's favorite treat 291 | ` 292 | }, 293 | 294 | { 295 | title: 'should change karma like in the docs', 296 | script: `\ 297 | charlie: kittens++ 298 | ... 299 | alice: kittens++ # so cute! 300 | ... 301 | bob: kittens-- 302 | ... 303 | alice: karma for kittens? 304 | membot: kittens has 1 karma 305 | ` 306 | }, 307 | 308 | { 309 | title: 'should get karma without a preposition', 310 | script: `\ 311 | alice: kittens++ 312 | ... 313 | alice: karma kittens 314 | membot: kittens has 1 karma 315 | ` 316 | }, 317 | 318 | { 319 | title: 'should get karma without a question mark', 320 | script: `\ 321 | alice: kittens++ 322 | ... 323 | alice: karma for kittens 324 | membot: kittens has 1 karma 325 | ` 326 | }, 327 | 328 | { 329 | title: 'should require addressing to learn things when enabled like the docs', 330 | script: `\ 331 | alice: @membot disable setting ambient 332 | membot: OK, I will no longer learn factoids without being told explicitly. 333 | alice: foo is bar 334 | ... 335 | alice: what is foo? 336 | membot: No idea. 337 | ` 338 | }, 339 | 340 | { 341 | title: 'should require addressing to respond to things when enabled like the docs', 342 | script: `\ 343 | alice: kittens are super cute 344 | ... 345 | alice: @membot enable setting direct 346 | membot: OK, interactions with me now require direct messages or @-mentions. 347 | alice: kittens? 348 | ... 349 | alice: hmm, nothing happened 350 | ... 351 | alice: @membot kittens? 352 | membot: kittens are super cute 353 | ` 354 | }, 355 | 356 | { 357 | title: 'should remember ambient factoids by default', 358 | script: `\ 359 | alice: foo is bar 360 | ... 361 | alice: what is foo? 362 | membot: foo is bar 363 | ` 364 | }, 365 | 366 | { 367 | title: 'should reply with a greeting when addressed or direct is disabled', 368 | script: `\ 369 | alice: hello 370 | membot: Hello, alice 371 | alice: @membot hello 372 | membot: Hello, alice 373 | alice: @membot enable setting direct 374 | membot: OK, interactions with me now require direct messages or @-mentions. 375 | alice: hello 376 | ... 377 | ` 378 | }, 379 | 380 | { 381 | title: 'should reply when addressed with nothing', 382 | script: `\ 383 | alice: membot? 384 | membot: Yes? 385 | ` 386 | }, 387 | 388 | { 389 | title: 'should ignore certain phrases completely', 390 | script: `\ 391 | alice: @membot enable setting verbose 392 | membot: OK, I will now be extra chatty. 393 | alice: this is foo 394 | ... 395 | alice: what is this? 396 | ... 397 | alice: what is that? 398 | ... 399 | alice: those are foo 400 | ... 401 | alice: what are those? 402 | ... 403 | alice: what? 404 | ... 405 | alice: huh? 406 | ... 407 | alice: who? 408 | ... 409 | alice: status is foo 410 | ... 411 | alice: status? 412 | ... 413 | alice: settings are foo 414 | ... 415 | alice: settings? 416 | ... 417 | alice: help is foo 418 | ... 419 | alice: help? 420 | ... 421 | ` 422 | }, 423 | 424 | { 425 | title: 'escapes @here and @channel and @everyone', 426 | script: `\ 427 | alice: foo is and and ! 428 | ... 429 | alice: what is foo? 430 | membot: foo is \`@here\` and \`@channel\` and \`@everyone\`! 431 | alice: bar is and and ! 432 | ... 433 | alice: what is bar? 434 | membot \`@here\` and \`@channel\` and \`@everyone\`! 435 | alice: baz is test@here.com and test@heretest.com and test@here 436 | ... 437 | alice: what is baz? 438 | membot: baz is test@here.com and test@heretest.com and test@here 439 | ` 440 | }, 441 | 442 | { 443 | title: 'should provide the user with some help text when direct messaging', 444 | script: `\ 445 | alice: @membot help 446 | membot: Hi alice, I'm a MemoryBot. I remember things and then recall them later when asked. Check out my home page for more information: https://statico.github.io/memorybot/ -- You can also leave feedback or file bugs on my GitHub issues page: https://github.com/statico/memorybot/issues 447 | ` 448 | }, 449 | 450 | { 451 | title: 'should reply with default settings', 452 | script: `\ 453 | alice: @membot status 454 | `, 455 | after: function () { 456 | assert.equal(this.bot._replies.length, 1) 457 | let status = this.bot._replies[0].msg.text 458 | status = status.replace(/v\d+\.\d+\.\d+/, 'vX.X.X') // Ignore version for testing. 459 | assert.equal(status, `\ 460 | *Status* 461 | I am memorybot vX.X.X - https://statico.github.com/memorybot/ 462 | I am currently remembering 3 factoids. 463 | *Settings* 464 | :white_medium_square: \`direct\` - Interactons require direct messages or @-mentions 465 | :ballot_box_with_check: \`ambient\` - Learn factoids from ambient room chatter 466 | :white_medium_square: \`verbose\` - Make the bot more chatty with confirmations, greetings, etc. 467 | Tell me "enable setting " or "disable setting " to change the above settings.` 468 | ) 469 | } 470 | }, 471 | 472 | { 473 | title: 'should treat settings as an alias for status', 474 | script: `\ 475 | alice: @membot settings 476 | `, 477 | after: function () { 478 | assert.equal(this.bot._replies.length, 1) 479 | let status = this.bot._replies[0].msg.text 480 | assert.match(status, /\*Settings\*\n/) 481 | } 482 | } 483 | 484 | ] 485 | 486 | class TestEngine extends MemoryBotEngine { 487 | constructor (store) { 488 | super(store) 489 | this._random = new Random(Random.engines.mt19937().seed(42)) 490 | } 491 | } 492 | 493 | class TestStore extends SQLiteStore { 494 | constructor () { 495 | super("not used because we'll use in-memory storage") 496 | } 497 | 498 | async getDatabase (_) { 499 | this.db = this.db || await sqlite.open(':memory:') 500 | return this.db 501 | } 502 | 503 | async destroy () { 504 | this.db.close() 505 | this.db = null 506 | } 507 | } 508 | 509 | // This emulates enough of a Botkit bot for the MemoryBot engine to use. 510 | class FakeBot { 511 | constructor () { 512 | this._replies = [] 513 | this.identity = {name: 'membot'} 514 | this.team_info = {id: 'T12345678'} 515 | this.api = { 516 | callAPI: (method, args, cb) => { 517 | this._replies.push({method, args}) 518 | cb(null, {}) 519 | }, 520 | users: { 521 | list: (args, cb) => { 522 | cb(null, { 523 | members: [ 524 | {name: 'alice', id: '1000'}, 525 | {name: 'bob', id: '1001'}, 526 | {name: 'charlie', id: '1002'} 527 | ] 528 | }) 529 | } 530 | }, 531 | im: { 532 | open: (args, cb) => { 533 | this._replies.push({method: 'im.open', args}) 534 | cb(null, { 535 | channel: { 536 | id: '#im-' + args.user 537 | } 538 | }) 539 | } 540 | } 541 | } 542 | } 543 | 544 | identifyTeam () { 545 | return this.team_info.id 546 | } 547 | 548 | reply (options, msg) { 549 | this._replies.push({options, msg}) 550 | } 551 | } 552 | 553 | describe('MemoryBotEngine', function () { 554 | beforeEach(async function () { 555 | this.sender = 'testuser' 556 | this.channel = '#general' 557 | this.isDirect = false 558 | 559 | this.bot = new FakeBot() 560 | this.store = new TestStore() 561 | this.engine = new TestEngine(this.store) 562 | await this.store.initialize(this.bot.team_info.id) 563 | await this.store.updateBotMetadata(this.bot) 564 | }) 565 | 566 | TESTS.forEach(async function (test) { 567 | let {title, script, before, after} = test 568 | 569 | it(title, async function () { 570 | if (before != null) before.call(this) 571 | 572 | let lines = script.trim().split(/\n/g).map(line => line.trim()) 573 | for (let line of lines) { 574 | if (line === '...') { 575 | let last = this.bot._replies.shift() 576 | assert.isUndefined(last, 'bot should not have responded.') 577 | continue 578 | } else { 579 | let [sender, ...msg] = line.split(' ') 580 | msg = msg.join(' ') 581 | 582 | this.isDirect = /^@membot\s+/.test(msg) 583 | msg = msg.replace(/^@membot\s+/, '') 584 | 585 | let isEmote = !/:$/.test(sender) 586 | this.sender = sender = sender.replace(/:$/, '') 587 | 588 | if (sender === 'membot') { 589 | assert.isAtLeast(this.bot._replies.length, 1, `number of bot replies after "${msg}"`) 590 | let last = this.bot._replies.shift() 591 | 592 | if (isEmote) { 593 | assert.equal(last.method, 'chat.meMessage', 'last bot reply should have been an emote') 594 | assert.equal(last.args.text, msg, 'bot emote') 595 | } else { 596 | assert.equal(last.msg.text, msg, 'bot reply') 597 | } 598 | this.bot.lastReply = null 599 | continue 600 | } else { 601 | await this.engine.handleMessage(this.bot, this.sender, this.channel, this.isDirect, msg) 602 | } 603 | } 604 | } 605 | 606 | if (after == null) { 607 | assert.equal(this.bot._replies.length, 0, 'no outstanding replies') 608 | } else { 609 | after.call(this) 610 | } 611 | }) 612 | }) 613 | 614 | afterEach(async function () { 615 | await this.store.destroy() 616 | }) 617 | }) 618 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ciscospark/common@0.7.87": 6 | version "0.7.87" 7 | resolved "https://registry.yarnpkg.com/@ciscospark/common/-/common-0.7.87.tgz#7285a21a358c62c8ce4cc3d990385d880d370f66" 8 | dependencies: 9 | babel-runtime "^6.23.0" 10 | backoff "^2.5.0" 11 | core-decorators "^0.14.0" 12 | envify "^3.4.1" 13 | lodash "^4.17.4" 14 | urlsafe-base64 "^1.0.0" 15 | 16 | "@ciscospark/http-core@0.7.87": 17 | version "0.7.87" 18 | resolved "https://registry.yarnpkg.com/@ciscospark/http-core/-/http-core-0.7.87.tgz#d9b8c8e0f1a676107db7eccd869635344dd421f8" 19 | dependencies: 20 | "@ciscospark/common" "0.7.87" 21 | babel-runtime "^6.23.0" 22 | envify "^3.4.1" 23 | file-type "^3.9.0" 24 | global "^4.3.1" 25 | is-function "^1.0.1" 26 | lodash "^4.17.4" 27 | parse-headers "^2.0.1" 28 | qs "^5.2.1" 29 | request "^2.81.0" 30 | xtend "^4.0.1" 31 | 32 | "@ciscospark/plugin-feature@0.7.87": 33 | version "0.7.87" 34 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-feature/-/plugin-feature-0.7.87.tgz#327fc14c0e5e98daf01b8b7bb2aa7542396729a9" 35 | dependencies: 36 | "@ciscospark/plugin-wdm" "0.7.87" 37 | "@ciscospark/spark-core" "0.7.87" 38 | babel-runtime "^6.23.0" 39 | envify "^3.4.1" 40 | 41 | "@ciscospark/plugin-locus@0.7.87": 42 | version "0.7.87" 43 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-locus/-/plugin-locus-0.7.87.tgz#12fef9c506f0e1a98fc73c760cf83626927d6fd3" 44 | dependencies: 45 | "@ciscospark/plugin-mercury" "0.7.87" 46 | "@ciscospark/spark-core" "0.7.87" 47 | babel-runtime "^6.23.0" 48 | envify "^3.4.1" 49 | lodash "^4.17.4" 50 | 51 | "@ciscospark/plugin-logger@0.7.87": 52 | version "0.7.87" 53 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-logger/-/plugin-logger-0.7.87.tgz#dc9c006dc119beb664e65f54bfcf5af2fad29c5d" 54 | dependencies: 55 | "@ciscospark/common" "0.7.87" 56 | "@ciscospark/spark-core" "0.7.87" 57 | babel-runtime "^6.23.0" 58 | envify "^3.4.1" 59 | lodash "^4.17.4" 60 | 61 | "@ciscospark/plugin-mercury@0.7.87": 62 | version "0.7.87" 63 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-mercury/-/plugin-mercury-0.7.87.tgz#d00a319feddc1a5b998f3ca9504b105a36efe017" 64 | dependencies: 65 | "@ciscospark/common" "0.7.87" 66 | "@ciscospark/plugin-feature" "0.7.87" 67 | "@ciscospark/plugin-wdm" "0.7.87" 68 | "@ciscospark/spark-core" "0.7.87" 69 | babel-runtime "^6.23.0" 70 | backoff "^2.5.0" 71 | envify "^3.4.1" 72 | lodash "^4.17.4" 73 | string "^3.3.3" 74 | uuid "^3.0.1" 75 | ws "^1.1.4" 76 | 77 | "@ciscospark/plugin-metrics@0.7.87": 78 | version "0.7.87" 79 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-metrics/-/plugin-metrics-0.7.87.tgz#6e20740c78865a0660eb5cdfef9ce20e80584860" 80 | dependencies: 81 | "@ciscospark/common" "0.7.87" 82 | "@ciscospark/plugin-wdm" "0.7.87" 83 | "@ciscospark/spark-core" "0.7.87" 84 | babel-runtime "^6.23.0" 85 | envify "^3.4.1" 86 | 87 | "@ciscospark/plugin-people@0.7.93": 88 | version "0.7.93" 89 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-people/-/plugin-people-0.7.93.tgz#0b3c7298a3921ad7d675dcbc9ed02e4f6468c33e" 90 | dependencies: 91 | "@ciscospark/spark-core" "0.7.87" 92 | babel-runtime "^6.23.0" 93 | envify "^3.4.1" 94 | 95 | "@ciscospark/plugin-phone@0.7.87": 96 | version "0.7.87" 97 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-phone/-/plugin-phone-0.7.87.tgz#acb56e497c26ab985bf177de6d3a721aa3be0916" 98 | dependencies: 99 | "@ciscospark/common" "0.7.87" 100 | "@ciscospark/plugin-locus" "0.7.87" 101 | "@ciscospark/plugin-metrics" "0.7.87" 102 | "@ciscospark/spark-core" "0.7.87" 103 | ampersand-state "^5.0.2" 104 | babel-runtime "^6.23.0" 105 | detectrtc "^1.3.4" 106 | envify "^3.4.1" 107 | lodash "^4.17.4" 108 | sdp-transform "^2.3.0" 109 | uuid "^3.0.1" 110 | webrtc-adapter "^3.2.0" 111 | 112 | "@ciscospark/plugin-wdm@0.7.87": 113 | version "0.7.87" 114 | resolved "https://registry.yarnpkg.com/@ciscospark/plugin-wdm/-/plugin-wdm-0.7.87.tgz#a1b7bfd324d24f9b4a818f1bd01bbe6422bf0ce2" 115 | dependencies: 116 | "@ciscospark/common" "0.7.87" 117 | "@ciscospark/http-core" "0.7.87" 118 | "@ciscospark/spark-core" "0.7.87" 119 | ampersand-collection "^2.0.0" 120 | ampersand-state "^5.0.2" 121 | babel-runtime "^6.23.0" 122 | envify "^3.4.1" 123 | lodash "^4.17.4" 124 | 125 | "@ciscospark/spark-core@0.7.87": 126 | version "0.7.87" 127 | resolved "https://registry.yarnpkg.com/@ciscospark/spark-core/-/spark-core-0.7.87.tgz#e0f373bf54e72ac887aa29a740523034ce8a8b52" 128 | dependencies: 129 | "@ciscospark/common" "0.7.87" 130 | "@ciscospark/http-core" "0.7.87" 131 | ampersand-events "^2.0.2" 132 | ampersand-state "^5.0.2" 133 | babel-runtime "^6.23.0" 134 | envify "^3.4.1" 135 | lodash "^4.17.4" 136 | uuid "^3.0.1" 137 | 138 | "@ciscospark/storage-adapter-local-storage@0.7.87": 139 | version "0.7.87" 140 | resolved "https://registry.yarnpkg.com/@ciscospark/storage-adapter-local-storage/-/storage-adapter-local-storage-0.7.87.tgz#278a3934b069dd7a45cd91035dfd6eb81052abd8" 141 | dependencies: 142 | "@ciscospark/spark-core" "0.7.87" 143 | babel-runtime "^6.23.0" 144 | envify "^3.4.1" 145 | 146 | abbrev@1, abbrev@1.0.x: 147 | version "1.0.9" 148 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 149 | 150 | accepts@~1.3.3: 151 | version "1.3.3" 152 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 153 | dependencies: 154 | mime-types "~2.1.11" 155 | negotiator "0.6.1" 156 | 157 | acorn-jsx@^3.0.0: 158 | version "3.0.1" 159 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 160 | dependencies: 161 | acorn "^3.0.4" 162 | 163 | acorn@^3.0.4: 164 | version "3.3.0" 165 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 166 | 167 | acorn@^4.0.3: 168 | version "4.0.11" 169 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" 170 | 171 | acorn@^5.0.1: 172 | version "5.0.3" 173 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" 174 | 175 | agent-base@2: 176 | version "2.0.1" 177 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" 178 | dependencies: 179 | extend "~3.0.0" 180 | semver "~5.0.1" 181 | 182 | ajv-keywords@^1.0.0: 183 | version "1.5.1" 184 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 185 | 186 | ajv@^4.7.0, ajv@^4.9.1: 187 | version "4.11.8" 188 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 189 | dependencies: 190 | co "^4.6.0" 191 | json-stable-stringify "^1.0.1" 192 | 193 | amdefine@>=0.0.4: 194 | version "1.0.1" 195 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 196 | 197 | ampersand-class-extend@^2.0.0: 198 | version "2.0.0" 199 | resolved "https://registry.yarnpkg.com/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz#52895ffa59217634a6188fd184b1048f5d808aff" 200 | dependencies: 201 | lodash "^4.11.1" 202 | 203 | ampersand-collection@^2.0.0: 204 | version "2.0.0" 205 | resolved "https://registry.yarnpkg.com/ampersand-collection/-/ampersand-collection-2.0.0.tgz#e82dcf3e5a5ad0687fbb381cc9335c647ab749bc" 206 | dependencies: 207 | ampersand-class-extend "^2.0.0" 208 | ampersand-events "^2.0.1" 209 | ampersand-version "^1.0.2" 210 | lodash "^4.11.1" 211 | 212 | ampersand-events@^2.0.1, ampersand-events@^2.0.2: 213 | version "2.0.2" 214 | resolved "https://registry.yarnpkg.com/ampersand-events/-/ampersand-events-2.0.2.tgz#f402bc2e18305fabd995dbdcd3b7057bbdd7d347" 215 | dependencies: 216 | ampersand-version "^1.0.2" 217 | lodash "^4.6.1" 218 | 219 | ampersand-state@^5.0.2: 220 | version "5.0.2" 221 | resolved "https://registry.yarnpkg.com/ampersand-state/-/ampersand-state-5.0.2.tgz#16830def866c644ecd21da8c8ba8717aa2b8d23c" 222 | dependencies: 223 | ampersand-events "^2.0.1" 224 | ampersand-version "^1.0.0" 225 | array-next "~0.0.1" 226 | key-tree-store "^1.3.0" 227 | lodash "^4.11.1" 228 | 229 | ampersand-version@^1.0.0, ampersand-version@^1.0.2: 230 | version "1.0.2" 231 | resolved "https://registry.yarnpkg.com/ampersand-version/-/ampersand-version-1.0.2.tgz#ff8f3d4ceac4d32ccd83f6bd6697397f7b59e2c0" 232 | dependencies: 233 | find-root "^0.1.1" 234 | through2 "^0.6.3" 235 | 236 | ansi-escapes@^1.1.0: 237 | version "1.4.0" 238 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 239 | 240 | ansi-regex@^2.0.0: 241 | version "2.1.1" 242 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 243 | 244 | ansi-styles@^2.2.1: 245 | version "2.2.1" 246 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 247 | 248 | anymatch@^1.3.0: 249 | version "1.3.0" 250 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 251 | dependencies: 252 | arrify "^1.0.0" 253 | micromatch "^2.1.5" 254 | 255 | append-transform@^0.4.0: 256 | version "0.4.0" 257 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" 258 | dependencies: 259 | default-require-extensions "^1.0.0" 260 | 261 | aproba@^1.0.3: 262 | version "1.1.1" 263 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" 264 | 265 | are-we-there-yet@~1.1.2: 266 | version "1.1.4" 267 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 268 | dependencies: 269 | delegates "^1.0.0" 270 | readable-stream "^2.0.6" 271 | 272 | argparse@^1.0.7: 273 | version "1.0.9" 274 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 275 | dependencies: 276 | sprintf-js "~1.0.2" 277 | 278 | arr-diff@^2.0.0: 279 | version "2.0.0" 280 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 281 | dependencies: 282 | arr-flatten "^1.0.1" 283 | 284 | arr-flatten@^1.0.1: 285 | version "1.0.3" 286 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 287 | 288 | array-back@^1.0.3, array-back@^1.0.4: 289 | version "1.0.4" 290 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" 291 | dependencies: 292 | typical "^2.6.0" 293 | 294 | array-flatten@1.1.1: 295 | version "1.1.1" 296 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 297 | 298 | array-next@~0.0.1: 299 | version "0.0.1" 300 | resolved "https://registry.yarnpkg.com/array-next/-/array-next-0.0.1.tgz#e5e4660a4c27fda8151ff7764275d00900062be1" 301 | 302 | array-union@^1.0.1: 303 | version "1.0.2" 304 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 305 | dependencies: 306 | array-uniq "^1.0.1" 307 | 308 | array-uniq@^1.0.1: 309 | version "1.0.2" 310 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.2.tgz#5fcc373920775723cfd64d65c64bef53bf9eba6d" 311 | 312 | array-unique@^0.2.1: 313 | version "0.2.1" 314 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 315 | 316 | array.prototype.find@^2.0.1: 317 | version "2.0.4" 318 | resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" 319 | dependencies: 320 | define-properties "^1.1.2" 321 | es-abstract "^1.7.0" 322 | 323 | arrify@^1.0.0: 324 | version "1.0.1" 325 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 326 | 327 | asap@~2.0.3: 328 | version "2.0.5" 329 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" 330 | 331 | asn1@~0.2.3: 332 | version "0.2.4" 333 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 334 | dependencies: 335 | safer-buffer "~2.1.0" 336 | 337 | assert-plus@1.0.0, assert-plus@^1.0.0: 338 | version "1.0.0" 339 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 340 | 341 | assert-plus@^0.2.0: 342 | version "0.2.0" 343 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 344 | 345 | assertion-error@^1.0.1: 346 | version "1.0.2" 347 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 348 | 349 | ast-types@0.9.6: 350 | version "0.9.6" 351 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" 352 | 353 | async-each@^1.0.0: 354 | version "1.0.1" 355 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 356 | 357 | async@1.x, async@^1.5.2: 358 | version "1.5.2" 359 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 360 | 361 | async@^2.0.1, async@^2.1.4, async@^2.1.5: 362 | version "2.4.0" 363 | resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" 364 | dependencies: 365 | lodash "^4.14.0" 366 | 367 | async@~1.0.0: 368 | version "1.0.0" 369 | resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" 370 | 371 | async@~1.2.1: 372 | version "1.2.1" 373 | resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0" 374 | 375 | asynckit@^0.4.0: 376 | version "0.4.0" 377 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 378 | 379 | aws-sign2@~0.6.0: 380 | version "0.6.0" 381 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 382 | 383 | aws4@^1.2.1: 384 | version "1.6.0" 385 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 386 | 387 | babel-cli@^6.24.1: 388 | version "6.24.1" 389 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" 390 | dependencies: 391 | babel-core "^6.24.1" 392 | babel-polyfill "^6.23.0" 393 | babel-register "^6.24.1" 394 | babel-runtime "^6.22.0" 395 | commander "^2.8.1" 396 | convert-source-map "^1.1.0" 397 | fs-readdir-recursive "^1.0.0" 398 | glob "^7.0.0" 399 | lodash "^4.2.0" 400 | output-file-sync "^1.1.0" 401 | path-is-absolute "^1.0.0" 402 | slash "^1.0.0" 403 | source-map "^0.5.0" 404 | v8flags "^2.0.10" 405 | optionalDependencies: 406 | chokidar "^1.6.1" 407 | 408 | babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: 409 | version "6.22.0" 410 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 411 | dependencies: 412 | chalk "^1.1.0" 413 | esutils "^2.0.2" 414 | js-tokens "^3.0.0" 415 | 416 | babel-core@^6.24.1: 417 | version "6.24.1" 418 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" 419 | dependencies: 420 | babel-code-frame "^6.22.0" 421 | babel-generator "^6.24.1" 422 | babel-helpers "^6.24.1" 423 | babel-messages "^6.23.0" 424 | babel-register "^6.24.1" 425 | babel-runtime "^6.22.0" 426 | babel-template "^6.24.1" 427 | babel-traverse "^6.24.1" 428 | babel-types "^6.24.1" 429 | babylon "^6.11.0" 430 | convert-source-map "^1.1.0" 431 | debug "^2.1.1" 432 | json5 "^0.5.0" 433 | lodash "^4.2.0" 434 | minimatch "^3.0.2" 435 | path-is-absolute "^1.0.0" 436 | private "^0.1.6" 437 | slash "^1.0.0" 438 | source-map "^0.5.0" 439 | 440 | babel-generator@^6.18.0, babel-generator@^6.24.1: 441 | version "6.24.1" 442 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" 443 | dependencies: 444 | babel-messages "^6.23.0" 445 | babel-runtime "^6.22.0" 446 | babel-types "^6.24.1" 447 | detect-indent "^4.0.0" 448 | jsesc "^1.3.0" 449 | lodash "^4.2.0" 450 | source-map "^0.5.0" 451 | trim-right "^1.0.1" 452 | 453 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 454 | version "6.24.1" 455 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 456 | dependencies: 457 | babel-helper-explode-assignable-expression "^6.24.1" 458 | babel-runtime "^6.22.0" 459 | babel-types "^6.24.1" 460 | 461 | babel-helper-call-delegate@^6.24.1: 462 | version "6.24.1" 463 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 464 | dependencies: 465 | babel-helper-hoist-variables "^6.24.1" 466 | babel-runtime "^6.22.0" 467 | babel-traverse "^6.24.1" 468 | babel-types "^6.24.1" 469 | 470 | babel-helper-define-map@^6.24.1: 471 | version "6.24.1" 472 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" 473 | dependencies: 474 | babel-helper-function-name "^6.24.1" 475 | babel-runtime "^6.22.0" 476 | babel-types "^6.24.1" 477 | lodash "^4.2.0" 478 | 479 | babel-helper-explode-assignable-expression@^6.24.1: 480 | version "6.24.1" 481 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 482 | dependencies: 483 | babel-runtime "^6.22.0" 484 | babel-traverse "^6.24.1" 485 | babel-types "^6.24.1" 486 | 487 | babel-helper-function-name@^6.24.1: 488 | version "6.24.1" 489 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 490 | dependencies: 491 | babel-helper-get-function-arity "^6.24.1" 492 | babel-runtime "^6.22.0" 493 | babel-template "^6.24.1" 494 | babel-traverse "^6.24.1" 495 | babel-types "^6.24.1" 496 | 497 | babel-helper-get-function-arity@^6.24.1: 498 | version "6.24.1" 499 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 500 | dependencies: 501 | babel-runtime "^6.22.0" 502 | babel-types "^6.24.1" 503 | 504 | babel-helper-hoist-variables@^6.24.1: 505 | version "6.24.1" 506 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 507 | dependencies: 508 | babel-runtime "^6.22.0" 509 | babel-types "^6.24.1" 510 | 511 | babel-helper-optimise-call-expression@^6.24.1: 512 | version "6.24.1" 513 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 514 | dependencies: 515 | babel-runtime "^6.22.0" 516 | babel-types "^6.24.1" 517 | 518 | babel-helper-regex@^6.24.1: 519 | version "6.24.1" 520 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" 521 | dependencies: 522 | babel-runtime "^6.22.0" 523 | babel-types "^6.24.1" 524 | lodash "^4.2.0" 525 | 526 | babel-helper-remap-async-to-generator@^6.24.1: 527 | version "6.24.1" 528 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 529 | dependencies: 530 | babel-helper-function-name "^6.24.1" 531 | babel-runtime "^6.22.0" 532 | babel-template "^6.24.1" 533 | babel-traverse "^6.24.1" 534 | babel-types "^6.24.1" 535 | 536 | babel-helper-replace-supers@^6.24.1: 537 | version "6.24.1" 538 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 539 | dependencies: 540 | babel-helper-optimise-call-expression "^6.24.1" 541 | babel-messages "^6.23.0" 542 | babel-runtime "^6.22.0" 543 | babel-template "^6.24.1" 544 | babel-traverse "^6.24.1" 545 | babel-types "^6.24.1" 546 | 547 | babel-helpers@^6.24.1: 548 | version "6.24.1" 549 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 550 | dependencies: 551 | babel-runtime "^6.22.0" 552 | babel-template "^6.24.1" 553 | 554 | babel-messages@^6.23.0: 555 | version "6.23.0" 556 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 557 | dependencies: 558 | babel-runtime "^6.22.0" 559 | 560 | babel-plugin-check-es2015-constants@^6.22.0: 561 | version "6.22.0" 562 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 563 | dependencies: 564 | babel-runtime "^6.22.0" 565 | 566 | babel-plugin-syntax-async-functions@^6.8.0: 567 | version "6.13.0" 568 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 569 | 570 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 571 | version "6.13.0" 572 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 573 | 574 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 575 | version "6.22.0" 576 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 577 | 578 | babel-plugin-transform-async-to-generator@^6.22.0: 579 | version "6.24.1" 580 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 581 | dependencies: 582 | babel-helper-remap-async-to-generator "^6.24.1" 583 | babel-plugin-syntax-async-functions "^6.8.0" 584 | babel-runtime "^6.22.0" 585 | 586 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 587 | version "6.22.0" 588 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 589 | dependencies: 590 | babel-runtime "^6.22.0" 591 | 592 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 593 | version "6.22.0" 594 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 595 | dependencies: 596 | babel-runtime "^6.22.0" 597 | 598 | babel-plugin-transform-es2015-block-scoping@^6.23.0: 599 | version "6.24.1" 600 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" 601 | dependencies: 602 | babel-runtime "^6.22.0" 603 | babel-template "^6.24.1" 604 | babel-traverse "^6.24.1" 605 | babel-types "^6.24.1" 606 | lodash "^4.2.0" 607 | 608 | babel-plugin-transform-es2015-classes@^6.23.0: 609 | version "6.24.1" 610 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 611 | dependencies: 612 | babel-helper-define-map "^6.24.1" 613 | babel-helper-function-name "^6.24.1" 614 | babel-helper-optimise-call-expression "^6.24.1" 615 | babel-helper-replace-supers "^6.24.1" 616 | babel-messages "^6.23.0" 617 | babel-runtime "^6.22.0" 618 | babel-template "^6.24.1" 619 | babel-traverse "^6.24.1" 620 | babel-types "^6.24.1" 621 | 622 | babel-plugin-transform-es2015-computed-properties@^6.22.0: 623 | version "6.24.1" 624 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 625 | dependencies: 626 | babel-runtime "^6.22.0" 627 | babel-template "^6.24.1" 628 | 629 | babel-plugin-transform-es2015-destructuring@^6.23.0: 630 | version "6.23.0" 631 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 632 | dependencies: 633 | babel-runtime "^6.22.0" 634 | 635 | babel-plugin-transform-es2015-duplicate-keys@^6.22.0: 636 | version "6.24.1" 637 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 638 | dependencies: 639 | babel-runtime "^6.22.0" 640 | babel-types "^6.24.1" 641 | 642 | babel-plugin-transform-es2015-for-of@^6.23.0: 643 | version "6.23.0" 644 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 645 | dependencies: 646 | babel-runtime "^6.22.0" 647 | 648 | babel-plugin-transform-es2015-function-name@^6.22.0: 649 | version "6.24.1" 650 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 651 | dependencies: 652 | babel-helper-function-name "^6.24.1" 653 | babel-runtime "^6.22.0" 654 | babel-types "^6.24.1" 655 | 656 | babel-plugin-transform-es2015-literals@^6.22.0: 657 | version "6.22.0" 658 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 659 | dependencies: 660 | babel-runtime "^6.22.0" 661 | 662 | babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: 663 | version "6.24.1" 664 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 665 | dependencies: 666 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 667 | babel-runtime "^6.22.0" 668 | babel-template "^6.24.1" 669 | 670 | babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 671 | version "6.24.1" 672 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" 673 | dependencies: 674 | babel-plugin-transform-strict-mode "^6.24.1" 675 | babel-runtime "^6.22.0" 676 | babel-template "^6.24.1" 677 | babel-types "^6.24.1" 678 | 679 | babel-plugin-transform-es2015-modules-systemjs@^6.23.0: 680 | version "6.24.1" 681 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 682 | dependencies: 683 | babel-helper-hoist-variables "^6.24.1" 684 | babel-runtime "^6.22.0" 685 | babel-template "^6.24.1" 686 | 687 | babel-plugin-transform-es2015-modules-umd@^6.23.0: 688 | version "6.24.1" 689 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 690 | dependencies: 691 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 692 | babel-runtime "^6.22.0" 693 | babel-template "^6.24.1" 694 | 695 | babel-plugin-transform-es2015-object-super@^6.22.0: 696 | version "6.24.1" 697 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 698 | dependencies: 699 | babel-helper-replace-supers "^6.24.1" 700 | babel-runtime "^6.22.0" 701 | 702 | babel-plugin-transform-es2015-parameters@^6.23.0: 703 | version "6.24.1" 704 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 705 | dependencies: 706 | babel-helper-call-delegate "^6.24.1" 707 | babel-helper-get-function-arity "^6.24.1" 708 | babel-runtime "^6.22.0" 709 | babel-template "^6.24.1" 710 | babel-traverse "^6.24.1" 711 | babel-types "^6.24.1" 712 | 713 | babel-plugin-transform-es2015-shorthand-properties@^6.22.0: 714 | version "6.24.1" 715 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 716 | dependencies: 717 | babel-runtime "^6.22.0" 718 | babel-types "^6.24.1" 719 | 720 | babel-plugin-transform-es2015-spread@^6.22.0: 721 | version "6.22.0" 722 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 723 | dependencies: 724 | babel-runtime "^6.22.0" 725 | 726 | babel-plugin-transform-es2015-sticky-regex@^6.22.0: 727 | version "6.24.1" 728 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 729 | dependencies: 730 | babel-helper-regex "^6.24.1" 731 | babel-runtime "^6.22.0" 732 | babel-types "^6.24.1" 733 | 734 | babel-plugin-transform-es2015-template-literals@^6.22.0: 735 | version "6.22.0" 736 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 737 | dependencies: 738 | babel-runtime "^6.22.0" 739 | 740 | babel-plugin-transform-es2015-typeof-symbol@^6.23.0: 741 | version "6.23.0" 742 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 743 | dependencies: 744 | babel-runtime "^6.22.0" 745 | 746 | babel-plugin-transform-es2015-unicode-regex@^6.22.0: 747 | version "6.24.1" 748 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 749 | dependencies: 750 | babel-helper-regex "^6.24.1" 751 | babel-runtime "^6.22.0" 752 | regexpu-core "^2.0.0" 753 | 754 | babel-plugin-transform-exponentiation-operator@^6.22.0: 755 | version "6.24.1" 756 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 757 | dependencies: 758 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 759 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 760 | babel-runtime "^6.22.0" 761 | 762 | babel-plugin-transform-regenerator@^6.22.0: 763 | version "6.24.1" 764 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" 765 | dependencies: 766 | regenerator-transform "0.9.11" 767 | 768 | babel-plugin-transform-strict-mode@^6.24.1: 769 | version "6.24.1" 770 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 771 | dependencies: 772 | babel-runtime "^6.22.0" 773 | babel-types "^6.24.1" 774 | 775 | babel-polyfill@^6.23.0: 776 | version "6.23.0" 777 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" 778 | dependencies: 779 | babel-runtime "^6.22.0" 780 | core-js "^2.4.0" 781 | regenerator-runtime "^0.10.0" 782 | 783 | babel-preset-env@^1.4.0: 784 | version "1.4.0" 785 | resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.4.0.tgz#c8e02a3bcc7792f23cded68e0355b9d4c28f0f7a" 786 | dependencies: 787 | babel-plugin-check-es2015-constants "^6.22.0" 788 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 789 | babel-plugin-transform-async-to-generator "^6.22.0" 790 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 791 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 792 | babel-plugin-transform-es2015-block-scoping "^6.23.0" 793 | babel-plugin-transform-es2015-classes "^6.23.0" 794 | babel-plugin-transform-es2015-computed-properties "^6.22.0" 795 | babel-plugin-transform-es2015-destructuring "^6.23.0" 796 | babel-plugin-transform-es2015-duplicate-keys "^6.22.0" 797 | babel-plugin-transform-es2015-for-of "^6.23.0" 798 | babel-plugin-transform-es2015-function-name "^6.22.0" 799 | babel-plugin-transform-es2015-literals "^6.22.0" 800 | babel-plugin-transform-es2015-modules-amd "^6.22.0" 801 | babel-plugin-transform-es2015-modules-commonjs "^6.23.0" 802 | babel-plugin-transform-es2015-modules-systemjs "^6.23.0" 803 | babel-plugin-transform-es2015-modules-umd "^6.23.0" 804 | babel-plugin-transform-es2015-object-super "^6.22.0" 805 | babel-plugin-transform-es2015-parameters "^6.23.0" 806 | babel-plugin-transform-es2015-shorthand-properties "^6.22.0" 807 | babel-plugin-transform-es2015-spread "^6.22.0" 808 | babel-plugin-transform-es2015-sticky-regex "^6.22.0" 809 | babel-plugin-transform-es2015-template-literals "^6.22.0" 810 | babel-plugin-transform-es2015-typeof-symbol "^6.23.0" 811 | babel-plugin-transform-es2015-unicode-regex "^6.22.0" 812 | babel-plugin-transform-exponentiation-operator "^6.22.0" 813 | babel-plugin-transform-regenerator "^6.22.0" 814 | browserslist "^1.4.0" 815 | invariant "^2.2.2" 816 | 817 | babel-register@^6.24.1: 818 | version "6.24.1" 819 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" 820 | dependencies: 821 | babel-core "^6.24.1" 822 | babel-runtime "^6.22.0" 823 | core-js "^2.4.0" 824 | home-or-tmp "^2.0.0" 825 | lodash "^4.2.0" 826 | mkdirp "^0.5.1" 827 | source-map-support "^0.4.2" 828 | 829 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: 830 | version "6.23.0" 831 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 832 | dependencies: 833 | core-js "^2.4.0" 834 | regenerator-runtime "^0.10.0" 835 | 836 | babel-template@^6.16.0, babel-template@^6.24.1: 837 | version "6.24.1" 838 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 839 | dependencies: 840 | babel-runtime "^6.22.0" 841 | babel-traverse "^6.24.1" 842 | babel-types "^6.24.1" 843 | babylon "^6.11.0" 844 | lodash "^4.2.0" 845 | 846 | babel-traverse@^6.18.0, babel-traverse@^6.24.1: 847 | version "6.24.1" 848 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 849 | dependencies: 850 | babel-code-frame "^6.22.0" 851 | babel-messages "^6.23.0" 852 | babel-runtime "^6.22.0" 853 | babel-types "^6.24.1" 854 | babylon "^6.15.0" 855 | debug "^2.2.0" 856 | globals "^9.0.0" 857 | invariant "^2.2.0" 858 | lodash "^4.2.0" 859 | 860 | babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1: 861 | version "6.24.1" 862 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 863 | dependencies: 864 | babel-runtime "^6.22.0" 865 | esutils "^2.0.2" 866 | lodash "^4.2.0" 867 | to-fast-properties "^1.0.1" 868 | 869 | babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: 870 | version "6.17.1" 871 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" 872 | 873 | back@^1.0.1: 874 | version "1.0.1" 875 | resolved "https://registry.yarnpkg.com/back/-/back-1.0.1.tgz#704f8a23da7ae35b7d47b648f9a79fd2a25570e3" 876 | dependencies: 877 | xtend "^4.0.0" 878 | 879 | backoff@^2.5.0: 880 | version "2.5.0" 881 | resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" 882 | dependencies: 883 | precond "0.2" 884 | 885 | balanced-match@^1.0.0: 886 | version "1.0.0" 887 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 888 | 889 | base62@^1.1.0: 890 | version "1.1.2" 891 | resolved "https://registry.yarnpkg.com/base62/-/base62-1.1.2.tgz#22ced6a49913565bc0b8d9a11563a465c084124c" 892 | 893 | base64url@2.0.0, base64url@^2.0.0: 894 | version "2.0.0" 895 | resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" 896 | 897 | bcrypt-pbkdf@^1.0.0: 898 | version "1.0.2" 899 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 900 | dependencies: 901 | tweetnacl "^0.14.3" 902 | 903 | binary-extensions@^1.0.0: 904 | version "1.8.0" 905 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 906 | 907 | bl@~1.1.2: 908 | version "1.1.2" 909 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" 910 | dependencies: 911 | readable-stream "~2.0.5" 912 | 913 | block-stream@*: 914 | version "0.0.9" 915 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 916 | dependencies: 917 | inherits "~2.0.0" 918 | 919 | body-parser@^1.17.1: 920 | version "1.17.1" 921 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" 922 | dependencies: 923 | bytes "2.4.0" 924 | content-type "~1.0.2" 925 | debug "2.6.1" 926 | depd "~1.1.0" 927 | http-errors "~1.6.1" 928 | iconv-lite "0.4.15" 929 | on-finished "~2.3.0" 930 | qs "6.4.0" 931 | raw-body "~2.2.0" 932 | type-is "~1.6.14" 933 | 934 | boom@2.x.x: 935 | version "2.10.1" 936 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 937 | dependencies: 938 | hoek "2.x.x" 939 | 940 | botbuilder@^3.7.0: 941 | version "3.8.1" 942 | resolved "https://registry.yarnpkg.com/botbuilder/-/botbuilder-3.8.1.tgz#12648ad3aba63888dcbc5e70fd809806bccbd0af" 943 | dependencies: 944 | async "^1.5.2" 945 | base64url "^2.0.0" 946 | chrono-node "^1.1.3" 947 | jsonwebtoken "^7.0.1" 948 | promise "^7.1.1" 949 | request "^2.69.0" 950 | rsa-pem-from-mod-exp "^0.8.4" 951 | sprintf-js "^1.0.3" 952 | url-join "^1.1.0" 953 | 954 | botkit-studio-sdk@^1.0.2: 955 | version "1.0.2" 956 | resolved "https://registry.yarnpkg.com/botkit-studio-sdk/-/botkit-studio-sdk-1.0.2.tgz#f20cc683a0b73aff922e92586910236d371c0f80" 957 | dependencies: 958 | promise "^7.1.1" 959 | request "^2.67.0" 960 | 961 | botkit@^0.5.4: 962 | version "0.5.4" 963 | resolved "https://registry.yarnpkg.com/botkit/-/botkit-0.5.4.tgz#d00663c73748ec2171af7f6e91668985781fb6f7" 964 | dependencies: 965 | async "^2.1.5" 966 | back "^1.0.1" 967 | body-parser "^1.17.1" 968 | botbuilder "^3.7.0" 969 | botkit-studio-sdk "^1.0.2" 970 | ciscospark "^0.7.69" 971 | clone "2.1.1" 972 | command-line-args "^4.0.2" 973 | crypto "0.0.3" 974 | express "^4.15.2" 975 | https-proxy-agent "^1.0.0" 976 | jfs "^0.2.6" 977 | localtunnel "^1.8.2" 978 | md5 "^2.2.1" 979 | mustache "^2.3.0" 980 | promise "^7.1.1" 981 | request "^2.81.0" 982 | twilio "^2.11.1" 983 | ware "^1.3.0" 984 | ws "^2.2.2" 985 | 986 | brace-expansion@^1.1.7: 987 | version "1.1.11" 988 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 989 | dependencies: 990 | balanced-match "^1.0.0" 991 | concat-map "0.0.1" 992 | 993 | braces@^1.8.2: 994 | version "1.8.5" 995 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 996 | dependencies: 997 | expand-range "^1.8.1" 998 | preserve "^0.2.0" 999 | repeat-element "^1.1.2" 1000 | 1001 | browser-stdout@1.3.0: 1002 | version "1.3.0" 1003 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 1004 | 1005 | browserslist@^1.4.0: 1006 | version "1.7.7" 1007 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" 1008 | dependencies: 1009 | caniuse-db "^1.0.30000639" 1010 | electron-to-chromium "^1.2.7" 1011 | 1012 | buffer-equal-constant-time@1.0.1: 1013 | version "1.0.1" 1014 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 1015 | 1016 | buffer-shims@~1.0.0: 1017 | version "1.0.0" 1018 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 1019 | 1020 | builtin-modules@^1.1.1: 1021 | version "1.1.1" 1022 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 1023 | 1024 | bytes@2.4.0: 1025 | version "2.4.0" 1026 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" 1027 | 1028 | caller-path@^0.1.0: 1029 | version "0.1.0" 1030 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 1031 | dependencies: 1032 | callsites "^0.2.0" 1033 | 1034 | callsites@^0.2.0: 1035 | version "0.2.0" 1036 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 1037 | 1038 | camelcase@^1.2.1: 1039 | version "1.2.1" 1040 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 1041 | 1042 | caniuse-db@^1.0.30000639: 1043 | version "1.0.30000666" 1044 | resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000666.tgz#951ed9f3d3bfaa08a06dafbb5089ab07cce6ab90" 1045 | 1046 | caseless@~0.11.0: 1047 | version "0.11.0" 1048 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 1049 | 1050 | caseless@~0.12.0: 1051 | version "0.12.0" 1052 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 1053 | 1054 | chai@3.5.0: 1055 | version "3.5.0" 1056 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" 1057 | dependencies: 1058 | assertion-error "^1.0.1" 1059 | deep-eql "^0.1.3" 1060 | type-detect "^1.0.0" 1061 | 1062 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 1063 | version "1.1.3" 1064 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 1065 | dependencies: 1066 | ansi-styles "^2.2.1" 1067 | escape-string-regexp "^1.0.2" 1068 | has-ansi "^2.0.0" 1069 | strip-ansi "^3.0.0" 1070 | supports-color "^2.0.0" 1071 | 1072 | charenc@~0.0.1: 1073 | version "0.0.2" 1074 | resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" 1075 | 1076 | chokidar@^1.6.1: 1077 | version "1.7.0" 1078 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 1079 | dependencies: 1080 | anymatch "^1.3.0" 1081 | async-each "^1.0.0" 1082 | glob-parent "^2.0.0" 1083 | inherits "^2.0.1" 1084 | is-binary-path "^1.0.0" 1085 | is-glob "^2.0.0" 1086 | path-is-absolute "^1.0.0" 1087 | readdirp "^2.0.0" 1088 | optionalDependencies: 1089 | fsevents "^1.0.0" 1090 | 1091 | chrono-node@^1.1.3: 1092 | version "1.3.1" 1093 | resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-1.3.1.tgz#d0dc762a4d926051b75016ad63c100caff9d1d84" 1094 | dependencies: 1095 | moment "^2.10.3" 1096 | 1097 | circular-json@^0.3.1: 1098 | version "0.3.1" 1099 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 1100 | 1101 | ciscospark@^0.7.69: 1102 | version "0.7.93" 1103 | resolved "https://registry.yarnpkg.com/ciscospark/-/ciscospark-0.7.93.tgz#01aa2e9bf4526c90ef6d81bec83b16f45f611102" 1104 | dependencies: 1105 | "@ciscospark/plugin-logger" "0.7.87" 1106 | "@ciscospark/plugin-people" "0.7.93" 1107 | "@ciscospark/plugin-phone" "0.7.87" 1108 | "@ciscospark/spark-core" "0.7.87" 1109 | "@ciscospark/storage-adapter-local-storage" "0.7.87" 1110 | babel-polyfill "^6.23.0" 1111 | babel-runtime "^6.23.0" 1112 | envify "^3.4.1" 1113 | lodash "^4.17.4" 1114 | 1115 | cli-cursor@^1.0.1: 1116 | version "1.0.2" 1117 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 1118 | dependencies: 1119 | restore-cursor "^1.0.1" 1120 | 1121 | cli-width@^2.0.0: 1122 | version "2.1.0" 1123 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 1124 | 1125 | cliui@^3.0.3: 1126 | version "3.2.0" 1127 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 1128 | dependencies: 1129 | string-width "^1.0.1" 1130 | strip-ansi "^3.0.1" 1131 | wrap-ansi "^2.0.0" 1132 | 1133 | clone@2.1.1: 1134 | version "2.1.1" 1135 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" 1136 | 1137 | clone@~1.0.2: 1138 | version "1.0.2" 1139 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 1140 | 1141 | co@3.1.0: 1142 | version "3.1.0" 1143 | resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" 1144 | 1145 | co@^4.6.0: 1146 | version "4.6.0" 1147 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1148 | 1149 | code-point-at@^1.0.0: 1150 | version "1.1.0" 1151 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 1152 | 1153 | colors@1.0.x: 1154 | version "1.0.3" 1155 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" 1156 | 1157 | combined-stream@^1.0.5, combined-stream@~1.0.5: 1158 | version "1.0.5" 1159 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 1160 | dependencies: 1161 | delayed-stream "~1.0.0" 1162 | 1163 | command-line-args@^4.0.2: 1164 | version "4.0.4" 1165 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.4.tgz#6b9ab497cfe82d2c1ce1e47d6c18a85382f5d9fe" 1166 | dependencies: 1167 | array-back "^1.0.4" 1168 | find-replace "^1.0.3" 1169 | typical "^2.6.0" 1170 | 1171 | commander@2.9.0, commander@^2.5.0, commander@^2.8.1, commander@^2.9.0: 1172 | version "2.9.0" 1173 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 1174 | dependencies: 1175 | graceful-readlink ">= 1.0.0" 1176 | 1177 | commander@~2.20.3: 1178 | version "2.20.3" 1179 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1180 | 1181 | commoner@^0.10.1: 1182 | version "0.10.8" 1183 | resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" 1184 | dependencies: 1185 | commander "^2.5.0" 1186 | detective "^4.3.1" 1187 | glob "^5.0.15" 1188 | graceful-fs "^4.1.2" 1189 | iconv-lite "^0.4.5" 1190 | mkdirp "^0.5.0" 1191 | private "^0.1.6" 1192 | q "^1.1.2" 1193 | recast "^0.11.17" 1194 | 1195 | concat-map@0.0.1: 1196 | version "0.0.1" 1197 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1198 | 1199 | concat-stream@^1.5.0, concat-stream@^1.5.2: 1200 | version "1.6.0" 1201 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 1202 | dependencies: 1203 | inherits "^2.0.3" 1204 | readable-stream "^2.2.2" 1205 | typedarray "^0.0.6" 1206 | 1207 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 1208 | version "1.1.0" 1209 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 1210 | 1211 | contains-path@^0.1.0: 1212 | version "0.1.0" 1213 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 1214 | 1215 | content-disposition@0.5.2: 1216 | version "0.5.2" 1217 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 1218 | 1219 | content-type@~1.0.2: 1220 | version "1.0.2" 1221 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 1222 | 1223 | convert-source-map@^1.1.0: 1224 | version "1.5.0" 1225 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 1226 | 1227 | cookie-signature@1.0.6: 1228 | version "1.0.6" 1229 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 1230 | 1231 | cookie@0.3.1: 1232 | version "0.3.1" 1233 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 1234 | 1235 | core-decorators@^0.14.0: 1236 | version "0.14.0" 1237 | resolved "https://registry.yarnpkg.com/core-decorators/-/core-decorators-0.14.0.tgz#13a14718518a5fc7cc623b3f0f4af879eed7f1cf" 1238 | 1239 | core-js@^2.4.0: 1240 | version "2.4.1" 1241 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 1242 | 1243 | core-util-is@~1.0.0: 1244 | version "1.0.2" 1245 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1246 | 1247 | coveralls@^2.11.2: 1248 | version "2.11.15" 1249 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" 1250 | dependencies: 1251 | js-yaml "3.6.1" 1252 | lcov-parse "0.0.10" 1253 | log-driver "1.2.5" 1254 | minimist "1.2.0" 1255 | request "2.75.0" 1256 | 1257 | coveralls@^2.13.1: 1258 | version "2.13.1" 1259 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" 1260 | dependencies: 1261 | js-yaml "3.6.1" 1262 | lcov-parse "0.0.10" 1263 | log-driver "1.2.5" 1264 | minimist "1.2.0" 1265 | request "2.79.0" 1266 | 1267 | crypt@~0.0.1: 1268 | version "0.0.2" 1269 | resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" 1270 | 1271 | cryptiles@2.x.x: 1272 | version "2.0.5" 1273 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 1274 | dependencies: 1275 | boom "2.x.x" 1276 | 1277 | crypto@0.0.3: 1278 | version "0.0.3" 1279 | resolved "https://registry.yarnpkg.com/crypto/-/crypto-0.0.3.tgz#470a81b86be4c5ee17acc8207a1f5315ae20dbb0" 1280 | 1281 | cycle@1.0.x: 1282 | version "1.0.3" 1283 | resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" 1284 | 1285 | d@1: 1286 | version "1.0.0" 1287 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 1288 | dependencies: 1289 | es5-ext "^0.10.9" 1290 | 1291 | dashdash@^1.12.0: 1292 | version "1.14.1" 1293 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 1294 | dependencies: 1295 | assert-plus "^1.0.0" 1296 | 1297 | debug-log@^1.0.0: 1298 | version "1.0.1" 1299 | resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 1300 | 1301 | debug@2, debug@2.6.1: 1302 | version "2.6.1" 1303 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" 1304 | dependencies: 1305 | ms "0.7.2" 1306 | 1307 | debug@2.2.0: 1308 | version "2.2.0" 1309 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 1310 | dependencies: 1311 | ms "0.7.1" 1312 | 1313 | debug@2.6.0: 1314 | version "2.6.0" 1315 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" 1316 | dependencies: 1317 | ms "0.7.2" 1318 | 1319 | debug@2.6.4, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: 1320 | version "2.6.4" 1321 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" 1322 | dependencies: 1323 | ms "0.7.3" 1324 | 1325 | decamelize@^1.0.0: 1326 | version "1.2.0" 1327 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 1328 | 1329 | deep-eql@^0.1.3: 1330 | version "0.1.3" 1331 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" 1332 | dependencies: 1333 | type-detect "0.1.1" 1334 | 1335 | deep-extend@~0.4.0: 1336 | version "0.4.1" 1337 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 1338 | 1339 | deep-is@~0.1.3: 1340 | version "0.1.3" 1341 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 1342 | 1343 | default-require-extensions@^1.0.0: 1344 | version "1.0.0" 1345 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" 1346 | dependencies: 1347 | strip-bom "^2.0.0" 1348 | 1349 | define-properties@^1.1.2: 1350 | version "1.1.2" 1351 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 1352 | dependencies: 1353 | foreach "^2.0.5" 1354 | object-keys "^1.0.8" 1355 | 1356 | defined@^1.0.0: 1357 | version "1.0.0" 1358 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 1359 | 1360 | deglob@^2.1.0: 1361 | version "2.1.0" 1362 | resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a" 1363 | dependencies: 1364 | find-root "^1.0.0" 1365 | glob "^7.0.5" 1366 | ignore "^3.0.9" 1367 | pkg-config "^1.1.0" 1368 | run-parallel "^1.1.2" 1369 | uniq "^1.0.1" 1370 | 1371 | del@^2.0.2: 1372 | version "2.2.2" 1373 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 1374 | dependencies: 1375 | globby "^5.0.0" 1376 | is-path-cwd "^1.0.0" 1377 | is-path-in-cwd "^1.0.0" 1378 | object-assign "^4.0.1" 1379 | pify "^2.0.0" 1380 | pinkie-promise "^2.0.0" 1381 | rimraf "^2.2.8" 1382 | 1383 | delayed-stream@~1.0.0: 1384 | version "1.0.0" 1385 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1386 | 1387 | delegates@^1.0.0: 1388 | version "1.0.0" 1389 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1390 | 1391 | denodeify@1.2.1: 1392 | version "1.2.1" 1393 | resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" 1394 | 1395 | depd@1.1.0, depd@~1.1.0: 1396 | version "1.1.0" 1397 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 1398 | 1399 | deprecate@^0.1.0: 1400 | version "0.1.0" 1401 | resolved "https://registry.yarnpkg.com/deprecate/-/deprecate-0.1.0.tgz#c49058612dc6c8e5145eafe4839b8c2c7d041c14" 1402 | 1403 | destroy@~1.0.4: 1404 | version "1.0.4" 1405 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 1406 | 1407 | detect-indent@^4.0.0: 1408 | version "4.0.0" 1409 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 1410 | dependencies: 1411 | repeating "^2.0.0" 1412 | 1413 | detective@^4.3.1: 1414 | version "4.5.0" 1415 | resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" 1416 | dependencies: 1417 | acorn "^4.0.3" 1418 | defined "^1.0.0" 1419 | 1420 | detectrtc@^1.3.4: 1421 | version "1.3.4" 1422 | resolved "https://registry.yarnpkg.com/detectrtc/-/detectrtc-1.3.4.tgz#c250d638a9f2fe844fa88865fe0f66673c6160fe" 1423 | 1424 | diff@3.2.0: 1425 | version "3.2.0" 1426 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 1427 | 1428 | doctrine@1.5.0, doctrine@^1.2.2: 1429 | version "1.5.0" 1430 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 1431 | dependencies: 1432 | esutils "^2.0.2" 1433 | isarray "^1.0.0" 1434 | 1435 | doctrine@^2.0.0: 1436 | version "2.0.0" 1437 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" 1438 | dependencies: 1439 | esutils "^2.0.2" 1440 | isarray "^1.0.0" 1441 | 1442 | dom-walk@^0.1.0: 1443 | version "0.1.1" 1444 | resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" 1445 | 1446 | dotenv@4.0.0: 1447 | version "4.0.0" 1448 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" 1449 | 1450 | ecc-jsbn@~0.1.1: 1451 | version "0.1.2" 1452 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 1453 | dependencies: 1454 | jsbn "~0.1.0" 1455 | safer-buffer "^2.1.0" 1456 | 1457 | ecdsa-sig-formatter@1.0.9: 1458 | version "1.0.9" 1459 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" 1460 | dependencies: 1461 | base64url "^2.0.0" 1462 | safe-buffer "^5.0.1" 1463 | 1464 | ee-first@1.1.1: 1465 | version "1.1.1" 1466 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1467 | 1468 | electron-to-chromium@^1.2.7: 1469 | version "1.3.9" 1470 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.9.tgz#db1cba2a26aebcca2f7f5b8b034554468609157d" 1471 | 1472 | encodeurl@~1.0.1: 1473 | version "1.0.1" 1474 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 1475 | 1476 | envify@^3.4.1: 1477 | version "3.4.1" 1478 | resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" 1479 | dependencies: 1480 | jstransform "^11.0.3" 1481 | through "~2.3.4" 1482 | 1483 | error-ex@^1.2.0: 1484 | version "1.3.1" 1485 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 1486 | dependencies: 1487 | is-arrayish "^0.2.1" 1488 | 1489 | es-abstract@^1.7.0: 1490 | version "1.7.0" 1491 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" 1492 | dependencies: 1493 | es-to-primitive "^1.1.1" 1494 | function-bind "^1.1.0" 1495 | is-callable "^1.1.3" 1496 | is-regex "^1.0.3" 1497 | 1498 | es-to-primitive@^1.1.1: 1499 | version "1.1.1" 1500 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 1501 | dependencies: 1502 | is-callable "^1.1.1" 1503 | is-date-object "^1.0.1" 1504 | is-symbol "^1.0.1" 1505 | 1506 | es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: 1507 | version "0.10.16" 1508 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" 1509 | dependencies: 1510 | es6-iterator "2" 1511 | es6-symbol "~3.1" 1512 | 1513 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: 1514 | version "2.0.1" 1515 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" 1516 | dependencies: 1517 | d "1" 1518 | es5-ext "^0.10.14" 1519 | es6-symbol "^3.1" 1520 | 1521 | es6-map@^0.1.3: 1522 | version "0.1.5" 1523 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 1524 | dependencies: 1525 | d "1" 1526 | es5-ext "~0.10.14" 1527 | es6-iterator "~2.0.1" 1528 | es6-set "~0.1.5" 1529 | es6-symbol "~3.1.1" 1530 | event-emitter "~0.3.5" 1531 | 1532 | es6-set@~0.1.5: 1533 | version "0.1.5" 1534 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 1535 | dependencies: 1536 | d "1" 1537 | es5-ext "~0.10.14" 1538 | es6-iterator "~2.0.1" 1539 | es6-symbol "3.1.1" 1540 | event-emitter "~0.3.5" 1541 | 1542 | es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: 1543 | version "3.1.1" 1544 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 1545 | dependencies: 1546 | d "1" 1547 | es5-ext "~0.10.14" 1548 | 1549 | es6-weak-map@^2.0.1: 1550 | version "2.0.2" 1551 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 1552 | dependencies: 1553 | d "1" 1554 | es5-ext "^0.10.14" 1555 | es6-iterator "^2.0.1" 1556 | es6-symbol "^3.1.1" 1557 | 1558 | escape-html@~1.0.3: 1559 | version "1.0.3" 1560 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1561 | 1562 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1563 | version "1.0.5" 1564 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1565 | 1566 | escope@^3.6.0: 1567 | version "3.6.0" 1568 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 1569 | dependencies: 1570 | es6-map "^0.1.3" 1571 | es6-weak-map "^2.0.1" 1572 | esrecurse "^4.1.0" 1573 | estraverse "^4.1.1" 1574 | 1575 | eslint-config-standard-jsx@4.0.1: 1576 | version "4.0.1" 1577 | resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz#cd4e463d0268e2d9e707f61f42f73f5b3333c642" 1578 | 1579 | eslint-config-standard@10.2.1: 1580 | version "10.2.1" 1581 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" 1582 | 1583 | eslint-import-resolver-node@^0.2.0: 1584 | version "0.2.3" 1585 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" 1586 | dependencies: 1587 | debug "^2.2.0" 1588 | object-assign "^4.0.1" 1589 | resolve "^1.1.6" 1590 | 1591 | eslint-module-utils@^2.0.0: 1592 | version "2.0.0" 1593 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" 1594 | dependencies: 1595 | debug "2.2.0" 1596 | pkg-dir "^1.0.0" 1597 | 1598 | eslint-plugin-import@~2.2.0: 1599 | version "2.2.0" 1600 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" 1601 | dependencies: 1602 | builtin-modules "^1.1.1" 1603 | contains-path "^0.1.0" 1604 | debug "^2.2.0" 1605 | doctrine "1.5.0" 1606 | eslint-import-resolver-node "^0.2.0" 1607 | eslint-module-utils "^2.0.0" 1608 | has "^1.0.1" 1609 | lodash.cond "^4.3.0" 1610 | minimatch "^3.0.3" 1611 | pkg-up "^1.0.0" 1612 | 1613 | eslint-plugin-node@~4.2.2: 1614 | version "4.2.2" 1615 | resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz#82959ca9aed79fcbd28bb1b188d05cac04fb3363" 1616 | dependencies: 1617 | ignore "^3.0.11" 1618 | minimatch "^3.0.2" 1619 | object-assign "^4.0.1" 1620 | resolve "^1.1.7" 1621 | semver "5.3.0" 1622 | 1623 | eslint-plugin-promise@~3.5.0: 1624 | version "3.5.0" 1625 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" 1626 | 1627 | eslint-plugin-react@~6.10.0: 1628 | version "6.10.3" 1629 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" 1630 | dependencies: 1631 | array.prototype.find "^2.0.1" 1632 | doctrine "^1.2.2" 1633 | has "^1.0.1" 1634 | jsx-ast-utils "^1.3.4" 1635 | object.assign "^4.0.4" 1636 | 1637 | eslint-plugin-standard@~3.0.1: 1638 | version "3.0.1" 1639 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" 1640 | 1641 | eslint@~3.19.0: 1642 | version "3.19.0" 1643 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" 1644 | dependencies: 1645 | babel-code-frame "^6.16.0" 1646 | chalk "^1.1.3" 1647 | concat-stream "^1.5.2" 1648 | debug "^2.1.1" 1649 | doctrine "^2.0.0" 1650 | escope "^3.6.0" 1651 | espree "^3.4.0" 1652 | esquery "^1.0.0" 1653 | estraverse "^4.2.0" 1654 | esutils "^2.0.2" 1655 | file-entry-cache "^2.0.0" 1656 | glob "^7.0.3" 1657 | globals "^9.14.0" 1658 | ignore "^3.2.0" 1659 | imurmurhash "^0.1.4" 1660 | inquirer "^0.12.0" 1661 | is-my-json-valid "^2.10.0" 1662 | is-resolvable "^1.0.0" 1663 | js-yaml "^3.5.1" 1664 | json-stable-stringify "^1.0.0" 1665 | levn "^0.3.0" 1666 | lodash "^4.0.0" 1667 | mkdirp "^0.5.0" 1668 | natural-compare "^1.4.0" 1669 | optionator "^0.8.2" 1670 | path-is-inside "^1.0.1" 1671 | pluralize "^1.2.1" 1672 | progress "^1.1.8" 1673 | require-uncached "^1.0.2" 1674 | shelljs "^0.7.5" 1675 | strip-bom "^3.0.0" 1676 | strip-json-comments "~2.0.1" 1677 | table "^3.7.8" 1678 | text-table "~0.2.0" 1679 | user-home "^2.0.0" 1680 | 1681 | espree@^3.4.0: 1682 | version "3.4.3" 1683 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" 1684 | dependencies: 1685 | acorn "^5.0.1" 1686 | acorn-jsx "^3.0.0" 1687 | 1688 | esprima-fb@^15001.1.0-dev-harmony-fb: 1689 | version "15001.1.0-dev-harmony-fb" 1690 | resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" 1691 | 1692 | esprima@^2.6.0: 1693 | version "2.7.3" 1694 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 1695 | 1696 | esprima@^3.1.1, esprima@~3.1.0: 1697 | version "3.1.3" 1698 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 1699 | 1700 | esquery@^1.0.0: 1701 | version "1.0.0" 1702 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" 1703 | dependencies: 1704 | estraverse "^4.0.0" 1705 | 1706 | esrecurse@^4.1.0: 1707 | version "4.1.0" 1708 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" 1709 | dependencies: 1710 | estraverse "~4.1.0" 1711 | object-assign "^4.0.1" 1712 | 1713 | estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: 1714 | version "4.2.0" 1715 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1716 | 1717 | estraverse@~4.1.0: 1718 | version "4.1.1" 1719 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" 1720 | 1721 | esutils@^2.0.2: 1722 | version "2.0.2" 1723 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1724 | 1725 | etag@~1.8.0: 1726 | version "1.8.0" 1727 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" 1728 | 1729 | event-emitter@~0.3.5: 1730 | version "0.3.5" 1731 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 1732 | dependencies: 1733 | d "1" 1734 | es5-ext "~0.10.14" 1735 | 1736 | exit-hook@^1.0.0: 1737 | version "1.1.1" 1738 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 1739 | 1740 | expand-brackets@^0.1.4: 1741 | version "0.1.5" 1742 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 1743 | dependencies: 1744 | is-posix-bracket "^0.1.0" 1745 | 1746 | expand-range@^1.8.1: 1747 | version "1.8.2" 1748 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 1749 | dependencies: 1750 | fill-range "^2.1.0" 1751 | 1752 | express@^4.15.2: 1753 | version "4.15.2" 1754 | resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" 1755 | dependencies: 1756 | accepts "~1.3.3" 1757 | array-flatten "1.1.1" 1758 | content-disposition "0.5.2" 1759 | content-type "~1.0.2" 1760 | cookie "0.3.1" 1761 | cookie-signature "1.0.6" 1762 | debug "2.6.1" 1763 | depd "~1.1.0" 1764 | encodeurl "~1.0.1" 1765 | escape-html "~1.0.3" 1766 | etag "~1.8.0" 1767 | finalhandler "~1.0.0" 1768 | fresh "0.5.0" 1769 | merge-descriptors "1.0.1" 1770 | methods "~1.1.2" 1771 | on-finished "~2.3.0" 1772 | parseurl "~1.3.1" 1773 | path-to-regexp "0.1.7" 1774 | proxy-addr "~1.1.3" 1775 | qs "6.4.0" 1776 | range-parser "~1.2.0" 1777 | send "0.15.1" 1778 | serve-static "1.12.1" 1779 | setprototypeof "1.0.3" 1780 | statuses "~1.3.1" 1781 | type-is "~1.6.14" 1782 | utils-merge "1.0.0" 1783 | vary "~1.1.0" 1784 | 1785 | extend@3, extend@~3.0.0: 1786 | version "3.0.2" 1787 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1788 | 1789 | extglob@^0.3.1: 1790 | version "0.3.2" 1791 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 1792 | dependencies: 1793 | is-extglob "^1.0.0" 1794 | 1795 | extsprintf@1.0.2: 1796 | version "1.0.2" 1797 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 1798 | 1799 | eyes@0.1.x: 1800 | version "0.1.8" 1801 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 1802 | 1803 | fast-levenshtein@~2.0.4: 1804 | version "2.0.6" 1805 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1806 | 1807 | figures@^1.3.5: 1808 | version "1.7.0" 1809 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 1810 | dependencies: 1811 | escape-string-regexp "^1.0.5" 1812 | object-assign "^4.1.0" 1813 | 1814 | file-entry-cache@^2.0.0: 1815 | version "2.0.0" 1816 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 1817 | dependencies: 1818 | flat-cache "^1.2.1" 1819 | object-assign "^4.0.1" 1820 | 1821 | file-type@^3.9.0: 1822 | version "3.9.0" 1823 | resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" 1824 | 1825 | filename-regex@^2.0.0: 1826 | version "2.0.1" 1827 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1828 | 1829 | fileset@^2.0.2: 1830 | version "2.0.3" 1831 | resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" 1832 | dependencies: 1833 | glob "^7.0.3" 1834 | minimatch "^3.0.3" 1835 | 1836 | fill-range@^2.1.0: 1837 | version "2.2.3" 1838 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 1839 | dependencies: 1840 | is-number "^2.1.0" 1841 | isobject "^2.0.0" 1842 | randomatic "^1.1.3" 1843 | repeat-element "^1.1.2" 1844 | repeat-string "^1.5.2" 1845 | 1846 | finalhandler@~1.0.0: 1847 | version "1.0.2" 1848 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" 1849 | dependencies: 1850 | debug "2.6.4" 1851 | encodeurl "~1.0.1" 1852 | escape-html "~1.0.3" 1853 | on-finished "~2.3.0" 1854 | parseurl "~1.3.1" 1855 | statuses "~1.3.1" 1856 | unpipe "~1.0.0" 1857 | 1858 | find-replace@^1.0.3: 1859 | version "1.0.3" 1860 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" 1861 | dependencies: 1862 | array-back "^1.0.4" 1863 | test-value "^2.1.0" 1864 | 1865 | find-root@^0.1.1: 1866 | version "0.1.2" 1867 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1" 1868 | 1869 | find-root@^1.0.0: 1870 | version "1.0.0" 1871 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.0.0.tgz#962ff211aab25c6520feeeb8d6287f8f6e95807a" 1872 | 1873 | find-up@^1.0.0: 1874 | version "1.1.2" 1875 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1876 | dependencies: 1877 | path-exists "^2.0.0" 1878 | pinkie-promise "^2.0.0" 1879 | 1880 | find-up@^2.0.0: 1881 | version "2.1.0" 1882 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1883 | dependencies: 1884 | locate-path "^2.0.0" 1885 | 1886 | flat-cache@^1.2.1: 1887 | version "1.2.2" 1888 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 1889 | dependencies: 1890 | circular-json "^0.3.1" 1891 | del "^2.0.2" 1892 | graceful-fs "^4.1.2" 1893 | write "^0.2.1" 1894 | 1895 | for-each@^0.3.2: 1896 | version "0.3.2" 1897 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" 1898 | dependencies: 1899 | is-function "~1.0.0" 1900 | 1901 | for-in@^1.0.1: 1902 | version "1.0.2" 1903 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1904 | 1905 | for-own@^0.1.4: 1906 | version "0.1.5" 1907 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1908 | dependencies: 1909 | for-in "^1.0.1" 1910 | 1911 | foreach@^2.0.5: 1912 | version "2.0.5" 1913 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 1914 | 1915 | forever-agent@~0.6.1: 1916 | version "0.6.1" 1917 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1918 | 1919 | form-data@~1.0.0-rc4: 1920 | version "1.0.1" 1921 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" 1922 | dependencies: 1923 | async "^2.0.1" 1924 | combined-stream "^1.0.5" 1925 | mime-types "^2.1.11" 1926 | 1927 | form-data@~2.0.0: 1928 | version "2.0.0" 1929 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" 1930 | dependencies: 1931 | asynckit "^0.4.0" 1932 | combined-stream "^1.0.5" 1933 | mime-types "^2.1.11" 1934 | 1935 | form-data@~2.1.1: 1936 | version "2.1.4" 1937 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 1938 | dependencies: 1939 | asynckit "^0.4.0" 1940 | combined-stream "^1.0.5" 1941 | mime-types "^2.1.12" 1942 | 1943 | forwarded@~0.1.0: 1944 | version "0.1.2" 1945 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1946 | 1947 | fresh@0.5.0: 1948 | version "0.5.0" 1949 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" 1950 | 1951 | fs-readdir-recursive@^1.0.0: 1952 | version "1.0.0" 1953 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" 1954 | 1955 | fs.realpath@^1.0.0: 1956 | version "1.0.0" 1957 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1958 | 1959 | fsevents@^1.0.0: 1960 | version "1.1.1" 1961 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" 1962 | dependencies: 1963 | nan "^2.3.0" 1964 | node-pre-gyp "^0.6.29" 1965 | 1966 | fstream-ignore@^1.0.5: 1967 | version "1.0.5" 1968 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1969 | dependencies: 1970 | fstream "^1.0.0" 1971 | inherits "2" 1972 | minimatch "^3.0.0" 1973 | 1974 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.12: 1975 | version "1.0.12" 1976 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 1977 | dependencies: 1978 | graceful-fs "^4.1.2" 1979 | inherits "~2.0.0" 1980 | mkdirp ">=0.5 0" 1981 | rimraf "2" 1982 | 1983 | function-bind@^1.0.2, function-bind@^1.1.0: 1984 | version "1.1.0" 1985 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 1986 | 1987 | gauge@~2.7.3: 1988 | version "2.7.4" 1989 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1990 | dependencies: 1991 | aproba "^1.0.3" 1992 | console-control-strings "^1.0.0" 1993 | has-unicode "^2.0.0" 1994 | object-assign "^4.1.0" 1995 | signal-exit "^3.0.0" 1996 | string-width "^1.0.1" 1997 | strip-ansi "^3.0.1" 1998 | wide-align "^1.1.0" 1999 | 2000 | generate-function@^2.0.0: 2001 | version "2.3.1" 2002 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" 2003 | dependencies: 2004 | is-property "^1.0.2" 2005 | 2006 | generate-object-property@^1.1.0: 2007 | version "1.2.0" 2008 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 2009 | dependencies: 2010 | is-property "^1.0.0" 2011 | 2012 | get-stdin@^5.0.1: 2013 | version "5.0.1" 2014 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 2015 | 2016 | getpass@^0.1.1: 2017 | version "0.1.7" 2018 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 2019 | dependencies: 2020 | assert-plus "^1.0.0" 2021 | 2022 | glob-base@^0.3.0: 2023 | version "0.3.0" 2024 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 2025 | dependencies: 2026 | glob-parent "^2.0.0" 2027 | is-glob "^2.0.0" 2028 | 2029 | glob-parent@^2.0.0: 2030 | version "2.0.0" 2031 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 2032 | dependencies: 2033 | is-glob "^2.0.0" 2034 | 2035 | glob@7.1.1: 2036 | version "7.1.1" 2037 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 2038 | dependencies: 2039 | fs.realpath "^1.0.0" 2040 | inflight "^1.0.4" 2041 | inherits "2" 2042 | minimatch "^3.0.2" 2043 | once "^1.3.0" 2044 | path-is-absolute "^1.0.0" 2045 | 2046 | glob@^5.0.15: 2047 | version "5.0.15" 2048 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 2049 | dependencies: 2050 | inflight "^1.0.4" 2051 | inherits "2" 2052 | minimatch "2 || 3" 2053 | once "^1.3.0" 2054 | path-is-absolute "^1.0.0" 2055 | 2056 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: 2057 | version "7.0.5" 2058 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" 2059 | dependencies: 2060 | fs.realpath "^1.0.0" 2061 | inflight "^1.0.4" 2062 | inherits "2" 2063 | minimatch "^3.0.2" 2064 | once "^1.3.0" 2065 | path-is-absolute "^1.0.0" 2066 | 2067 | glob@^7.1.3: 2068 | version "7.1.4" 2069 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 2070 | dependencies: 2071 | fs.realpath "^1.0.0" 2072 | inflight "^1.0.4" 2073 | inherits "2" 2074 | minimatch "^3.0.4" 2075 | once "^1.3.0" 2076 | path-is-absolute "^1.0.0" 2077 | 2078 | global@^4.3.1: 2079 | version "4.3.2" 2080 | resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" 2081 | dependencies: 2082 | min-document "^2.19.0" 2083 | process "~0.5.1" 2084 | 2085 | globals@^9.0.0, globals@^9.14.0: 2086 | version "9.17.0" 2087 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 2088 | 2089 | globby@^5.0.0: 2090 | version "5.0.0" 2091 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 2092 | dependencies: 2093 | array-union "^1.0.1" 2094 | arrify "^1.0.0" 2095 | glob "^7.0.3" 2096 | object-assign "^4.0.1" 2097 | pify "^2.0.0" 2098 | pinkie-promise "^2.0.0" 2099 | 2100 | graceful-fs@4.1.11: 2101 | version "4.1.11" 2102 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 2103 | 2104 | graceful-fs@^4.1.2, graceful-fs@^4.1.4: 2105 | version "4.2.2" 2106 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" 2107 | 2108 | "graceful-readlink@>= 1.0.0": 2109 | version "1.0.1" 2110 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 2111 | 2112 | growl@1.9.2: 2113 | version "1.9.2" 2114 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 2115 | 2116 | handlebars@^4.0.3: 2117 | version "4.5.3" 2118 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" 2119 | dependencies: 2120 | neo-async "^2.6.0" 2121 | optimist "^0.6.1" 2122 | source-map "^0.6.1" 2123 | optionalDependencies: 2124 | uglify-js "^3.1.4" 2125 | 2126 | har-schema@^1.0.5: 2127 | version "1.0.5" 2128 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 2129 | 2130 | har-validator@~2.0.6: 2131 | version "2.0.6" 2132 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 2133 | dependencies: 2134 | chalk "^1.1.1" 2135 | commander "^2.9.0" 2136 | is-my-json-valid "^2.12.4" 2137 | pinkie-promise "^2.0.0" 2138 | 2139 | har-validator@~4.2.1: 2140 | version "4.2.1" 2141 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 2142 | dependencies: 2143 | ajv "^4.9.1" 2144 | har-schema "^1.0.5" 2145 | 2146 | has-ansi@^2.0.0: 2147 | version "2.0.0" 2148 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 2149 | dependencies: 2150 | ansi-regex "^2.0.0" 2151 | 2152 | has-flag@^1.0.0: 2153 | version "1.0.0" 2154 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 2155 | 2156 | has-unicode@^2.0.0: 2157 | version "2.0.1" 2158 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 2159 | 2160 | has@^1.0.1: 2161 | version "1.0.1" 2162 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 2163 | dependencies: 2164 | function-bind "^1.0.2" 2165 | 2166 | hawk@~3.1.3: 2167 | version "3.1.3" 2168 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 2169 | dependencies: 2170 | boom "2.x.x" 2171 | cryptiles "2.x.x" 2172 | hoek "2.x.x" 2173 | sntp "1.x.x" 2174 | 2175 | hoek@2.x.x: 2176 | version "2.16.3" 2177 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 2178 | 2179 | home-or-tmp@^2.0.0: 2180 | version "2.0.0" 2181 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 2182 | dependencies: 2183 | os-homedir "^1.0.0" 2184 | os-tmpdir "^1.0.1" 2185 | 2186 | html-entities@^1.2.1: 2187 | version "1.2.1" 2188 | resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" 2189 | 2190 | http-errors@~1.6.1: 2191 | version "1.6.1" 2192 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" 2193 | dependencies: 2194 | depd "1.1.0" 2195 | inherits "2.0.3" 2196 | setprototypeof "1.0.3" 2197 | statuses ">= 1.3.1 < 2" 2198 | 2199 | http-signature@~1.1.0: 2200 | version "1.1.1" 2201 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 2202 | dependencies: 2203 | assert-plus "^0.2.0" 2204 | jsprim "^1.2.2" 2205 | sshpk "^1.7.0" 2206 | 2207 | https-proxy-agent@^1.0.0: 2208 | version "1.0.0" 2209 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" 2210 | dependencies: 2211 | agent-base "2" 2212 | debug "2" 2213 | extend "3" 2214 | 2215 | iconv-lite@0.4.15, iconv-lite@^0.4.5: 2216 | version "0.4.15" 2217 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" 2218 | 2219 | ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0: 2220 | version "3.3.0" 2221 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" 2222 | 2223 | imurmurhash@^0.1.4: 2224 | version "0.1.4" 2225 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 2226 | 2227 | inflight@^1.0.4: 2228 | version "1.0.6" 2229 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 2230 | dependencies: 2231 | once "^1.3.0" 2232 | wrappy "1" 2233 | 2234 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: 2235 | version "2.0.4" 2236 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 2237 | 2238 | inherits@2.0.3: 2239 | version "2.0.3" 2240 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 2241 | 2242 | ini@~1.3.0: 2243 | version "1.3.4" 2244 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 2245 | 2246 | inquirer@^0.12.0: 2247 | version "0.12.0" 2248 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" 2249 | dependencies: 2250 | ansi-escapes "^1.1.0" 2251 | ansi-regex "^2.0.0" 2252 | chalk "^1.0.0" 2253 | cli-cursor "^1.0.1" 2254 | cli-width "^2.0.0" 2255 | figures "^1.3.5" 2256 | lodash "^4.3.0" 2257 | readline2 "^1.0.1" 2258 | run-async "^0.1.0" 2259 | rx-lite "^3.1.2" 2260 | string-width "^1.0.1" 2261 | strip-ansi "^3.0.0" 2262 | through "^2.3.6" 2263 | 2264 | interpret@^1.0.0: 2265 | version "1.0.3" 2266 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" 2267 | 2268 | invariant@^2.2.0, invariant@^2.2.2: 2269 | version "2.2.2" 2270 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 2271 | dependencies: 2272 | loose-envify "^1.0.0" 2273 | 2274 | invert-kv@^1.0.0: 2275 | version "1.0.0" 2276 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 2277 | 2278 | ipaddr.js@1.3.0: 2279 | version "1.3.0" 2280 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" 2281 | 2282 | is-arrayish@^0.2.1: 2283 | version "0.2.1" 2284 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 2285 | 2286 | is-binary-path@^1.0.0: 2287 | version "1.0.1" 2288 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 2289 | dependencies: 2290 | binary-extensions "^1.0.0" 2291 | 2292 | is-buffer@^1.1.5, is-buffer@~1.1.1: 2293 | version "1.1.5" 2294 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 2295 | 2296 | is-callable@^1.1.1, is-callable@^1.1.3: 2297 | version "1.1.3" 2298 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 2299 | 2300 | is-date-object@^1.0.1: 2301 | version "1.0.1" 2302 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 2303 | 2304 | is-dotfile@^1.0.0: 2305 | version "1.0.2" 2306 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 2307 | 2308 | is-equal-shallow@^0.1.3: 2309 | version "0.1.3" 2310 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 2311 | dependencies: 2312 | is-primitive "^2.0.0" 2313 | 2314 | is-extendable@^0.1.1: 2315 | version "0.1.1" 2316 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 2317 | 2318 | is-extglob@^1.0.0: 2319 | version "1.0.0" 2320 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 2321 | 2322 | is-finite@^1.0.0: 2323 | version "1.0.2" 2324 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 2325 | dependencies: 2326 | number-is-nan "^1.0.0" 2327 | 2328 | is-fullwidth-code-point@^1.0.0: 2329 | version "1.0.0" 2330 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 2331 | dependencies: 2332 | number-is-nan "^1.0.0" 2333 | 2334 | is-fullwidth-code-point@^2.0.0: 2335 | version "2.0.0" 2336 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 2337 | 2338 | is-function@^1.0.1, is-function@~1.0.0: 2339 | version "1.0.1" 2340 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" 2341 | 2342 | is-glob@^2.0.0, is-glob@^2.0.1: 2343 | version "2.0.1" 2344 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 2345 | dependencies: 2346 | is-extglob "^1.0.0" 2347 | 2348 | is-my-ip-valid@^1.0.0: 2349 | version "1.0.0" 2350 | resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" 2351 | 2352 | is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: 2353 | version "2.20.0" 2354 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" 2355 | dependencies: 2356 | generate-function "^2.0.0" 2357 | generate-object-property "^1.1.0" 2358 | is-my-ip-valid "^1.0.0" 2359 | jsonpointer "^4.0.0" 2360 | xtend "^4.0.0" 2361 | 2362 | is-number@^2.0.2, is-number@^2.1.0: 2363 | version "2.1.0" 2364 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 2365 | dependencies: 2366 | kind-of "^3.0.2" 2367 | 2368 | is-path-cwd@^1.0.0: 2369 | version "1.0.0" 2370 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 2371 | 2372 | is-path-in-cwd@^1.0.0: 2373 | version "1.0.0" 2374 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 2375 | dependencies: 2376 | is-path-inside "^1.0.0" 2377 | 2378 | is-path-inside@^1.0.0: 2379 | version "1.0.0" 2380 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 2381 | dependencies: 2382 | path-is-inside "^1.0.1" 2383 | 2384 | is-posix-bracket@^0.1.0: 2385 | version "0.1.1" 2386 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 2387 | 2388 | is-primitive@^2.0.0: 2389 | version "2.0.0" 2390 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 2391 | 2392 | is-property@^1.0.0, is-property@^1.0.2: 2393 | version "1.0.2" 2394 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 2395 | 2396 | is-regex@^1.0.3: 2397 | version "1.0.4" 2398 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 2399 | dependencies: 2400 | has "^1.0.1" 2401 | 2402 | is-resolvable@^1.0.0: 2403 | version "1.0.0" 2404 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 2405 | dependencies: 2406 | tryit "^1.0.1" 2407 | 2408 | is-symbol@^1.0.1: 2409 | version "1.0.1" 2410 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 2411 | 2412 | is-typedarray@~1.0.0: 2413 | version "1.0.0" 2414 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 2415 | 2416 | is-utf8@^0.2.0: 2417 | version "0.2.1" 2418 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 2419 | 2420 | isarray@0.0.1: 2421 | version "0.0.1" 2422 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 2423 | 2424 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 2425 | version "1.0.0" 2426 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 2427 | 2428 | isemail@1.x.x: 2429 | version "1.2.0" 2430 | resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" 2431 | 2432 | isexe@^2.0.0: 2433 | version "2.0.0" 2434 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 2435 | 2436 | isobject@^2.0.0: 2437 | version "2.1.0" 2438 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 2439 | dependencies: 2440 | isarray "1.0.0" 2441 | 2442 | isstream@0.1.x, isstream@~0.1.2: 2443 | version "0.1.2" 2444 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 2445 | 2446 | istanbul-api@^1.0.0-alpha: 2447 | version "1.1.8" 2448 | resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" 2449 | dependencies: 2450 | async "^2.1.4" 2451 | fileset "^2.0.2" 2452 | istanbul-lib-coverage "^1.1.0" 2453 | istanbul-lib-hook "^1.0.6" 2454 | istanbul-lib-instrument "^1.7.1" 2455 | istanbul-lib-report "^1.1.0" 2456 | istanbul-lib-source-maps "^1.2.0" 2457 | istanbul-reports "^1.1.0" 2458 | js-yaml "^3.7.0" 2459 | mkdirp "^0.5.1" 2460 | once "^1.4.0" 2461 | 2462 | istanbul-coveralls@1.0.3: 2463 | version "1.0.3" 2464 | resolved "https://registry.yarnpkg.com/istanbul-coveralls/-/istanbul-coveralls-1.0.3.tgz#4f1c1592be104d591f933cbf9c0f2f5284adcf00" 2465 | dependencies: 2466 | chalk "^1.0.0" 2467 | coveralls "^2.11.2" 2468 | minimist "^1.1.1" 2469 | rimraf "^2.3.4" 2470 | sum-up "^1.0.1" 2471 | 2472 | istanbul-lib-coverage@^1.1.0: 2473 | version "1.1.0" 2474 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" 2475 | 2476 | istanbul-lib-hook@^1.0.6: 2477 | version "1.0.6" 2478 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" 2479 | dependencies: 2480 | append-transform "^0.4.0" 2481 | 2482 | istanbul-lib-instrument@^1.7.1: 2483 | version "1.7.1" 2484 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" 2485 | dependencies: 2486 | babel-generator "^6.18.0" 2487 | babel-template "^6.16.0" 2488 | babel-traverse "^6.18.0" 2489 | babel-types "^6.18.0" 2490 | babylon "^6.13.0" 2491 | istanbul-lib-coverage "^1.1.0" 2492 | semver "^5.3.0" 2493 | 2494 | istanbul-lib-report@^1.1.0: 2495 | version "1.1.0" 2496 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" 2497 | dependencies: 2498 | istanbul-lib-coverage "^1.1.0" 2499 | mkdirp "^0.5.1" 2500 | path-parse "^1.0.5" 2501 | supports-color "^3.1.2" 2502 | 2503 | istanbul-lib-source-maps@^1.2.0: 2504 | version "1.2.0" 2505 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" 2506 | dependencies: 2507 | debug "^2.6.3" 2508 | istanbul-lib-coverage "^1.1.0" 2509 | mkdirp "^0.5.1" 2510 | rimraf "^2.6.1" 2511 | source-map "^0.5.3" 2512 | 2513 | istanbul-reports@^1.1.0: 2514 | version "1.1.0" 2515 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" 2516 | dependencies: 2517 | handlebars "^4.0.3" 2518 | 2519 | istanbul@1.0.0-alpha.2: 2520 | version "1.0.0-alpha.2" 2521 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-1.0.0-alpha.2.tgz#06096bc08e98baad744aae46962d8df9fac63d08" 2522 | dependencies: 2523 | abbrev "1.0.x" 2524 | async "1.x" 2525 | istanbul-api "^1.0.0-alpha" 2526 | js-yaml "3.x" 2527 | mkdirp "0.5.x" 2528 | nopt "3.x" 2529 | which "^1.1.1" 2530 | wordwrap "^1.0.0" 2531 | 2532 | jfs@^0.2.6: 2533 | version "0.2.6" 2534 | resolved "https://registry.yarnpkg.com/jfs/-/jfs-0.2.6.tgz#851b728ee5cff449855cf9ad554f4a5e14ab6912" 2535 | dependencies: 2536 | async "~1.2.1" 2537 | clone "~1.0.2" 2538 | mkdirp "~0.5.1" 2539 | node-uuid "~1.4.3" 2540 | 2541 | joi@^6.10.1: 2542 | version "6.10.1" 2543 | resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" 2544 | dependencies: 2545 | hoek "2.x.x" 2546 | isemail "1.x.x" 2547 | moment "2.x.x" 2548 | topo "1.x.x" 2549 | 2550 | js-tokens@^3.0.0: 2551 | version "3.0.1" 2552 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 2553 | 2554 | js-yaml@3.6.1, js-yaml@3.x: 2555 | version "3.6.1" 2556 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" 2557 | dependencies: 2558 | argparse "^1.0.7" 2559 | esprima "^2.6.0" 2560 | 2561 | js-yaml@^3.5.1, js-yaml@^3.7.0: 2562 | version "3.8.4" 2563 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" 2564 | dependencies: 2565 | argparse "^1.0.7" 2566 | esprima "^3.1.1" 2567 | 2568 | jsbn@~0.1.0: 2569 | version "0.1.1" 2570 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 2571 | 2572 | jsesc@^1.3.0: 2573 | version "1.3.0" 2574 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 2575 | 2576 | jsesc@~0.5.0: 2577 | version "0.5.0" 2578 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 2579 | 2580 | json-schema@0.2.3: 2581 | version "0.2.3" 2582 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 2583 | 2584 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 2585 | version "1.0.1" 2586 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 2587 | dependencies: 2588 | jsonify "~0.0.0" 2589 | 2590 | json-stringify-safe@~5.0.1: 2591 | version "5.0.1" 2592 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 2593 | 2594 | json3@3.3.2: 2595 | version "3.3.2" 2596 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 2597 | 2598 | json5@^0.5.0: 2599 | version "0.5.1" 2600 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 2601 | 2602 | jsonify@~0.0.0: 2603 | version "0.0.0" 2604 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 2605 | 2606 | jsonpointer@^4.0.0: 2607 | version "4.0.1" 2608 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 2609 | 2610 | jsonwebtoken@5.4.x: 2611 | version "5.4.1" 2612 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-5.4.1.tgz#2055c639195ffe56314fa6a51df02468186a9695" 2613 | dependencies: 2614 | jws "^3.0.0" 2615 | ms "^0.7.1" 2616 | 2617 | jsonwebtoken@^7.0.1: 2618 | version "7.4.0" 2619 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.0.tgz#515bf2bba070ec615bad97fd2e945027eb476946" 2620 | dependencies: 2621 | joi "^6.10.1" 2622 | jws "^3.1.4" 2623 | lodash.once "^4.0.0" 2624 | ms "^0.7.1" 2625 | xtend "^4.0.1" 2626 | 2627 | jsprim@^1.2.2: 2628 | version "1.4.0" 2629 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 2630 | dependencies: 2631 | assert-plus "1.0.0" 2632 | extsprintf "1.0.2" 2633 | json-schema "0.2.3" 2634 | verror "1.3.6" 2635 | 2636 | jstransform@^11.0.3: 2637 | version "11.0.3" 2638 | resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" 2639 | dependencies: 2640 | base62 "^1.1.0" 2641 | commoner "^0.10.1" 2642 | esprima-fb "^15001.1.0-dev-harmony-fb" 2643 | object-assign "^2.0.0" 2644 | source-map "^0.4.2" 2645 | 2646 | jsx-ast-utils@^1.3.4: 2647 | version "1.4.1" 2648 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" 2649 | 2650 | jwa@^1.1.4: 2651 | version "1.1.5" 2652 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" 2653 | dependencies: 2654 | base64url "2.0.0" 2655 | buffer-equal-constant-time "1.0.1" 2656 | ecdsa-sig-formatter "1.0.9" 2657 | safe-buffer "^5.0.1" 2658 | 2659 | jws@^3.0.0, jws@^3.1.4: 2660 | version "3.1.4" 2661 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" 2662 | dependencies: 2663 | base64url "^2.0.0" 2664 | jwa "^1.1.4" 2665 | safe-buffer "^5.0.1" 2666 | 2667 | key-tree-store@^1.3.0: 2668 | version "1.3.0" 2669 | resolved "https://registry.yarnpkg.com/key-tree-store/-/key-tree-store-1.3.0.tgz#5ea29afc2529a425938437d6955b714ce6a9791f" 2670 | 2671 | kind-of@^3.0.2: 2672 | version "3.2.0" 2673 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" 2674 | dependencies: 2675 | is-buffer "^1.1.5" 2676 | 2677 | lcid@^1.0.0: 2678 | version "1.0.0" 2679 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 2680 | dependencies: 2681 | invert-kv "^1.0.0" 2682 | 2683 | lcov-parse@0.0.10: 2684 | version "0.0.10" 2685 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" 2686 | 2687 | levn@^0.3.0, levn@~0.3.0: 2688 | version "0.3.0" 2689 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 2690 | dependencies: 2691 | prelude-ls "~1.1.2" 2692 | type-check "~0.3.2" 2693 | 2694 | load-json-file@^2.0.0: 2695 | version "2.0.0" 2696 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 2697 | dependencies: 2698 | graceful-fs "^4.1.2" 2699 | parse-json "^2.2.0" 2700 | pify "^2.0.0" 2701 | strip-bom "^3.0.0" 2702 | 2703 | localtunnel@^1.8.2: 2704 | version "1.8.2" 2705 | resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.8.2.tgz#913051e8328b51f75ad8a22ad1f5c5b8c599a359" 2706 | dependencies: 2707 | debug "2.2.0" 2708 | openurl "1.1.0" 2709 | request "2.78.0" 2710 | yargs "3.29.0" 2711 | 2712 | locate-path@^2.0.0: 2713 | version "2.0.0" 2714 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 2715 | dependencies: 2716 | p-locate "^2.0.0" 2717 | path-exists "^3.0.0" 2718 | 2719 | lodash._baseassign@^3.0.0: 2720 | version "3.2.0" 2721 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 2722 | dependencies: 2723 | lodash._basecopy "^3.0.0" 2724 | lodash.keys "^3.0.0" 2725 | 2726 | lodash._basecopy@^3.0.0: 2727 | version "3.0.1" 2728 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 2729 | 2730 | lodash._basecreate@^3.0.0: 2731 | version "3.0.3" 2732 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 2733 | 2734 | lodash._getnative@^3.0.0: 2735 | version "3.9.1" 2736 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 2737 | 2738 | lodash._isiterateecall@^3.0.0: 2739 | version "3.0.9" 2740 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 2741 | 2742 | lodash.cond@^4.3.0: 2743 | version "4.5.2" 2744 | resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" 2745 | 2746 | lodash.create@3.1.1: 2747 | version "3.1.1" 2748 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 2749 | dependencies: 2750 | lodash._baseassign "^3.0.0" 2751 | lodash._basecreate "^3.0.0" 2752 | lodash._isiterateecall "^3.0.0" 2753 | 2754 | lodash.isarguments@^3.0.0: 2755 | version "3.1.0" 2756 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 2757 | 2758 | lodash.isarray@^3.0.0: 2759 | version "3.0.4" 2760 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 2761 | 2762 | lodash.keys@^3.0.0: 2763 | version "3.1.2" 2764 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 2765 | dependencies: 2766 | lodash._getnative "^3.0.0" 2767 | lodash.isarguments "^3.0.0" 2768 | lodash.isarray "^3.0.0" 2769 | 2770 | lodash.once@^4.0.0: 2771 | version "4.1.1" 2772 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 2773 | 2774 | lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: 2775 | version "4.17.19" 2776 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 2777 | 2778 | log-driver@1.2.5: 2779 | version "1.2.5" 2780 | resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" 2781 | 2782 | loose-envify@^1.0.0: 2783 | version "1.3.1" 2784 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 2785 | dependencies: 2786 | js-tokens "^3.0.0" 2787 | 2788 | md5@^2.2.1: 2789 | version "2.2.1" 2790 | resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" 2791 | dependencies: 2792 | charenc "~0.0.1" 2793 | crypt "~0.0.1" 2794 | is-buffer "~1.1.1" 2795 | 2796 | media-typer@0.3.0: 2797 | version "0.3.0" 2798 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 2799 | 2800 | merge-descriptors@1.0.1: 2801 | version "1.0.1" 2802 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 2803 | 2804 | methods@~1.1.2: 2805 | version "1.1.2" 2806 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 2807 | 2808 | micromatch@^2.1.5: 2809 | version "2.3.11" 2810 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 2811 | dependencies: 2812 | arr-diff "^2.0.0" 2813 | array-unique "^0.2.1" 2814 | braces "^1.8.2" 2815 | expand-brackets "^0.1.4" 2816 | extglob "^0.3.1" 2817 | filename-regex "^2.0.0" 2818 | is-extglob "^1.0.0" 2819 | is-glob "^2.0.1" 2820 | kind-of "^3.0.2" 2821 | normalize-path "^2.0.1" 2822 | object.omit "^2.0.0" 2823 | parse-glob "^3.0.4" 2824 | regex-cache "^0.4.2" 2825 | 2826 | mime-db@~1.27.0: 2827 | version "1.27.0" 2828 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 2829 | 2830 | mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: 2831 | version "2.1.15" 2832 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 2833 | dependencies: 2834 | mime-db "~1.27.0" 2835 | 2836 | mime@1.3.4: 2837 | version "1.3.4" 2838 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 2839 | 2840 | min-document@^2.19.0: 2841 | version "2.19.0" 2842 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" 2843 | dependencies: 2844 | dom-walk "^0.1.0" 2845 | 2846 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: 2847 | version "3.0.4" 2848 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2849 | dependencies: 2850 | brace-expansion "^1.1.7" 2851 | 2852 | minimist@0.0.8: 2853 | version "0.0.8" 2854 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2855 | 2856 | minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: 2857 | version "1.2.0" 2858 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2859 | 2860 | minimist@~0.0.1: 2861 | version "0.0.10" 2862 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 2863 | 2864 | mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: 2865 | version "0.5.1" 2866 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2867 | dependencies: 2868 | minimist "0.0.8" 2869 | 2870 | mocha-lcov-reporter@^1.3.0: 2871 | version "1.3.0" 2872 | resolved "https://registry.yarnpkg.com/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz#469bdef4f8afc9a116056f079df6182d0afb0384" 2873 | 2874 | mocha@^3.3.0: 2875 | version "3.3.0" 2876 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.3.0.tgz#d29b7428d3f52c82e2e65df1ecb7064e1aabbfb5" 2877 | dependencies: 2878 | browser-stdout "1.3.0" 2879 | commander "2.9.0" 2880 | debug "2.6.0" 2881 | diff "3.2.0" 2882 | escape-string-regexp "1.0.5" 2883 | glob "7.1.1" 2884 | growl "1.9.2" 2885 | json3 "3.3.2" 2886 | lodash.create "3.1.1" 2887 | mkdirp "0.5.1" 2888 | supports-color "3.1.2" 2889 | 2890 | moment@2.x.x, moment@^2.10.3: 2891 | version "2.24.0" 2892 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" 2893 | 2894 | ms@0.7.1: 2895 | version "0.7.1" 2896 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 2897 | 2898 | ms@0.7.2, ms@^0.7.1: 2899 | version "0.7.2" 2900 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 2901 | 2902 | ms@0.7.3: 2903 | version "0.7.3" 2904 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" 2905 | 2906 | mustache@^2.3.0: 2907 | version "2.3.0" 2908 | resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" 2909 | 2910 | mute-stream@0.0.5: 2911 | version "0.0.5" 2912 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 2913 | 2914 | nan@^2.3.0, nan@~2.4.0: 2915 | version "2.4.0" 2916 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" 2917 | 2918 | natural-compare@^1.4.0: 2919 | version "1.4.0" 2920 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2921 | 2922 | negotiator@0.6.1: 2923 | version "0.6.1" 2924 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 2925 | 2926 | neo-async@^2.6.0: 2927 | version "2.6.1" 2928 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 2929 | 2930 | node-pre-gyp@^0.6.29, node-pre-gyp@~0.6.31: 2931 | version "0.6.34" 2932 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" 2933 | dependencies: 2934 | mkdirp "^0.5.1" 2935 | nopt "^4.0.1" 2936 | npmlog "^4.0.2" 2937 | rc "^1.1.7" 2938 | request "^2.81.0" 2939 | rimraf "^2.6.1" 2940 | semver "^5.3.0" 2941 | tar "^2.2.1" 2942 | tar-pack "^3.4.0" 2943 | 2944 | node-uuid@~1.4.3, node-uuid@~1.4.7: 2945 | version "1.4.8" 2946 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" 2947 | 2948 | nopt@3.x: 2949 | version "3.0.6" 2950 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 2951 | dependencies: 2952 | abbrev "1" 2953 | 2954 | nopt@^4.0.1: 2955 | version "4.0.1" 2956 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2957 | dependencies: 2958 | abbrev "1" 2959 | osenv "^0.1.4" 2960 | 2961 | normalize-path@^2.0.1: 2962 | version "2.1.1" 2963 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2964 | dependencies: 2965 | remove-trailing-separator "^1.0.1" 2966 | 2967 | npmlog@^4.0.2: 2968 | version "4.1.0" 2969 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" 2970 | dependencies: 2971 | are-we-there-yet "~1.1.2" 2972 | console-control-strings "~1.1.0" 2973 | gauge "~2.7.3" 2974 | set-blocking "~2.0.0" 2975 | 2976 | number-is-nan@^1.0.0: 2977 | version "1.0.1" 2978 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2979 | 2980 | oauth-sign@~0.8.1: 2981 | version "0.8.2" 2982 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 2983 | 2984 | object-assign@^2.0.0: 2985 | version "2.1.1" 2986 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" 2987 | 2988 | object-assign@^4.0.1, object-assign@^4.1.0: 2989 | version "4.1.1" 2990 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2991 | 2992 | object-keys@^1.0.10, object-keys@^1.0.8: 2993 | version "1.0.11" 2994 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 2995 | 2996 | object.assign@^4.0.4: 2997 | version "4.0.4" 2998 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" 2999 | dependencies: 3000 | define-properties "^1.1.2" 3001 | function-bind "^1.1.0" 3002 | object-keys "^1.0.10" 3003 | 3004 | object.omit@^2.0.0: 3005 | version "2.0.1" 3006 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 3007 | dependencies: 3008 | for-own "^0.1.4" 3009 | is-extendable "^0.1.1" 3010 | 3011 | on-finished@~2.3.0: 3012 | version "2.3.0" 3013 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 3014 | dependencies: 3015 | ee-first "1.1.1" 3016 | 3017 | once@^1.3.0, once@^1.3.3, once@^1.4.0: 3018 | version "1.4.0" 3019 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 3020 | dependencies: 3021 | wrappy "1" 3022 | 3023 | onetime@^1.0.0: 3024 | version "1.1.0" 3025 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 3026 | 3027 | openurl@1.1.0: 3028 | version "1.1.0" 3029 | resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.0.tgz#e2f2189d999c04823201f083f0f1a7cd8903187a" 3030 | 3031 | optimist@^0.6.1: 3032 | version "0.6.1" 3033 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 3034 | dependencies: 3035 | minimist "~0.0.1" 3036 | wordwrap "~0.0.2" 3037 | 3038 | optionator@^0.8.2: 3039 | version "0.8.2" 3040 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 3041 | dependencies: 3042 | deep-is "~0.1.3" 3043 | fast-levenshtein "~2.0.4" 3044 | levn "~0.3.0" 3045 | prelude-ls "~1.1.2" 3046 | type-check "~0.3.2" 3047 | wordwrap "~1.0.0" 3048 | 3049 | options@>=0.0.5: 3050 | version "0.0.6" 3051 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 3052 | 3053 | os-homedir@^1.0.0: 3054 | version "1.0.2" 3055 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 3056 | 3057 | os-locale@^1.4.0: 3058 | version "1.4.0" 3059 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 3060 | dependencies: 3061 | lcid "^1.0.0" 3062 | 3063 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 3064 | version "1.0.2" 3065 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 3066 | 3067 | osenv@^0.1.4: 3068 | version "0.1.4" 3069 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 3070 | dependencies: 3071 | os-homedir "^1.0.0" 3072 | os-tmpdir "^1.0.0" 3073 | 3074 | output-file-sync@^1.1.0: 3075 | version "1.1.2" 3076 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 3077 | dependencies: 3078 | graceful-fs "^4.1.4" 3079 | mkdirp "^0.5.1" 3080 | object-assign "^4.1.0" 3081 | 3082 | p-limit@^1.1.0: 3083 | version "1.1.0" 3084 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" 3085 | 3086 | p-locate@^2.0.0: 3087 | version "2.0.0" 3088 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 3089 | dependencies: 3090 | p-limit "^1.1.0" 3091 | 3092 | parse-glob@^3.0.4: 3093 | version "3.0.4" 3094 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 3095 | dependencies: 3096 | glob-base "^0.3.0" 3097 | is-dotfile "^1.0.0" 3098 | is-extglob "^1.0.0" 3099 | is-glob "^2.0.0" 3100 | 3101 | parse-headers@^2.0.1: 3102 | version "2.0.1" 3103 | resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536" 3104 | dependencies: 3105 | for-each "^0.3.2" 3106 | trim "0.0.1" 3107 | 3108 | parse-json@^2.2.0: 3109 | version "2.2.0" 3110 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 3111 | dependencies: 3112 | error-ex "^1.2.0" 3113 | 3114 | parseurl@~1.3.1: 3115 | version "1.3.1" 3116 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 3117 | 3118 | path-exists@^2.0.0: 3119 | version "2.1.0" 3120 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 3121 | dependencies: 3122 | pinkie-promise "^2.0.0" 3123 | 3124 | path-exists@^3.0.0: 3125 | version "3.0.0" 3126 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 3127 | 3128 | path-is-absolute@^1.0.0: 3129 | version "1.0.1" 3130 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 3131 | 3132 | path-is-inside@^1.0.1: 3133 | version "1.0.2" 3134 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 3135 | 3136 | path-parse@^1.0.5: 3137 | version "1.0.5" 3138 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 3139 | 3140 | path-to-regexp@0.1.7: 3141 | version "0.1.7" 3142 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 3143 | 3144 | performance-now@^0.2.0: 3145 | version "0.2.0" 3146 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 3147 | 3148 | pify@^2.0.0: 3149 | version "2.3.0" 3150 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 3151 | 3152 | pinkie-promise@^2.0.0: 3153 | version "2.0.1" 3154 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 3155 | dependencies: 3156 | pinkie "^2.0.0" 3157 | 3158 | pinkie@^2.0.0: 3159 | version "2.0.4" 3160 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 3161 | 3162 | pkg-conf@^2.0.0: 3163 | version "2.0.0" 3164 | resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279" 3165 | dependencies: 3166 | find-up "^2.0.0" 3167 | load-json-file "^2.0.0" 3168 | 3169 | pkg-config@^1.1.0: 3170 | version "1.1.1" 3171 | resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" 3172 | dependencies: 3173 | debug-log "^1.0.0" 3174 | find-root "^1.0.0" 3175 | xtend "^4.0.1" 3176 | 3177 | pkg-dir@^1.0.0: 3178 | version "1.0.0" 3179 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 3180 | dependencies: 3181 | find-up "^1.0.0" 3182 | 3183 | pkg-up@^1.0.0: 3184 | version "1.0.0" 3185 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" 3186 | dependencies: 3187 | find-up "^1.0.0" 3188 | 3189 | pluralize@^1.2.1: 3190 | version "1.2.1" 3191 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" 3192 | 3193 | precond@0.2: 3194 | version "0.2.3" 3195 | resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" 3196 | 3197 | prelude-ls@~1.1.2: 3198 | version "1.1.2" 3199 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 3200 | 3201 | preserve@^0.2.0: 3202 | version "0.2.0" 3203 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 3204 | 3205 | private@^0.1.6, private@~0.1.5: 3206 | version "0.1.7" 3207 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 3208 | 3209 | process-nextick-args@~1.0.6: 3210 | version "1.0.7" 3211 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 3212 | 3213 | process@~0.5.1: 3214 | version "0.5.2" 3215 | resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" 3216 | 3217 | progress@^1.1.8: 3218 | version "1.1.8" 3219 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 3220 | 3221 | promise@^7.1.1: 3222 | version "7.1.1" 3223 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" 3224 | dependencies: 3225 | asap "~2.0.3" 3226 | 3227 | proxy-addr@~1.1.3: 3228 | version "1.1.4" 3229 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" 3230 | dependencies: 3231 | forwarded "~0.1.0" 3232 | ipaddr.js "1.3.0" 3233 | 3234 | punycode@^1.4.1: 3235 | version "1.4.1" 3236 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 3237 | 3238 | q@0.9.7: 3239 | version "0.9.7" 3240 | resolved "https://registry.yarnpkg.com/q/-/q-0.9.7.tgz#4de2e6cb3b29088c9e4cbc03bf9d42fb96ce2f75" 3241 | 3242 | q@^1.1.2: 3243 | version "1.5.0" 3244 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" 3245 | 3246 | qs@6.4.0, qs@~6.4.0: 3247 | version "6.4.0" 3248 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 3249 | 3250 | qs@^5.2.1: 3251 | version "5.2.1" 3252 | resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc" 3253 | 3254 | qs@~6.2.0: 3255 | version "6.2.3" 3256 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" 3257 | 3258 | qs@~6.3.0: 3259 | version "6.3.2" 3260 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" 3261 | 3262 | random-js@1.0.8: 3263 | version "1.0.8" 3264 | resolved "https://registry.yarnpkg.com/random-js/-/random-js-1.0.8.tgz#968fd689a6f25d6c0aac766283de2f688c9c190a" 3265 | 3266 | randomatic@^1.1.3: 3267 | version "1.1.6" 3268 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 3269 | dependencies: 3270 | is-number "^2.0.2" 3271 | kind-of "^3.0.2" 3272 | 3273 | range-parser@~1.2.0: 3274 | version "1.2.0" 3275 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 3276 | 3277 | raw-body@~2.2.0: 3278 | version "2.2.0" 3279 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" 3280 | dependencies: 3281 | bytes "2.4.0" 3282 | iconv-lite "0.4.15" 3283 | unpipe "1.0.0" 3284 | 3285 | rc@^1.1.7: 3286 | version "1.2.1" 3287 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 3288 | dependencies: 3289 | deep-extend "~0.4.0" 3290 | ini "~1.3.0" 3291 | minimist "^1.2.0" 3292 | strip-json-comments "~2.0.1" 3293 | 3294 | "readable-stream@>=1.0.33-1 <1.1.0-0": 3295 | version "1.0.34" 3296 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 3297 | dependencies: 3298 | core-util-is "~1.0.0" 3299 | inherits "~2.0.1" 3300 | isarray "0.0.1" 3301 | string_decoder "~0.10.x" 3302 | 3303 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: 3304 | version "2.2.9" 3305 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 3306 | dependencies: 3307 | buffer-shims "~1.0.0" 3308 | core-util-is "~1.0.0" 3309 | inherits "~2.0.1" 3310 | isarray "~1.0.0" 3311 | process-nextick-args "~1.0.6" 3312 | string_decoder "~1.0.0" 3313 | util-deprecate "~1.0.1" 3314 | 3315 | readable-stream@~2.0.5: 3316 | version "2.0.6" 3317 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 3318 | dependencies: 3319 | core-util-is "~1.0.0" 3320 | inherits "~2.0.1" 3321 | isarray "~1.0.0" 3322 | process-nextick-args "~1.0.6" 3323 | string_decoder "~0.10.x" 3324 | util-deprecate "~1.0.1" 3325 | 3326 | readdirp@^2.0.0: 3327 | version "2.1.0" 3328 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 3329 | dependencies: 3330 | graceful-fs "^4.1.2" 3331 | minimatch "^3.0.2" 3332 | readable-stream "^2.0.2" 3333 | set-immediate-shim "^1.0.1" 3334 | 3335 | readline2@^1.0.1: 3336 | version "1.0.1" 3337 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 3338 | dependencies: 3339 | code-point-at "^1.0.0" 3340 | is-fullwidth-code-point "^1.0.0" 3341 | mute-stream "0.0.5" 3342 | 3343 | recast@^0.11.17: 3344 | version "0.11.23" 3345 | resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" 3346 | dependencies: 3347 | ast-types "0.9.6" 3348 | esprima "~3.1.0" 3349 | private "~0.1.5" 3350 | source-map "~0.5.0" 3351 | 3352 | rechoir@^0.6.2: 3353 | version "0.6.2" 3354 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 3355 | dependencies: 3356 | resolve "^1.1.6" 3357 | 3358 | regenerate@^1.2.1: 3359 | version "1.3.2" 3360 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" 3361 | 3362 | regenerator-runtime@^0.10.0: 3363 | version "0.10.5" 3364 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 3365 | 3366 | regenerator-transform@0.9.11: 3367 | version "0.9.11" 3368 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" 3369 | dependencies: 3370 | babel-runtime "^6.18.0" 3371 | babel-types "^6.19.0" 3372 | private "^0.1.6" 3373 | 3374 | regex-cache@^0.4.2: 3375 | version "0.4.3" 3376 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 3377 | dependencies: 3378 | is-equal-shallow "^0.1.3" 3379 | is-primitive "^2.0.0" 3380 | 3381 | regexpu-core@^2.0.0: 3382 | version "2.0.0" 3383 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 3384 | dependencies: 3385 | regenerate "^1.2.1" 3386 | regjsgen "^0.2.0" 3387 | regjsparser "^0.1.4" 3388 | 3389 | regjsgen@^0.2.0: 3390 | version "0.2.0" 3391 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 3392 | 3393 | regjsparser@^0.1.4: 3394 | version "0.1.5" 3395 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 3396 | dependencies: 3397 | jsesc "~0.5.0" 3398 | 3399 | remove-trailing-separator@^1.0.1: 3400 | version "1.0.1" 3401 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 3402 | 3403 | repeat-element@^1.1.2: 3404 | version "1.1.2" 3405 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 3406 | 3407 | repeat-string@^1.5.2: 3408 | version "1.6.1" 3409 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 3410 | 3411 | repeating@^2.0.0: 3412 | version "2.0.1" 3413 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 3414 | dependencies: 3415 | is-finite "^1.0.0" 3416 | 3417 | request@2.74.x: 3418 | version "2.74.0" 3419 | resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" 3420 | dependencies: 3421 | aws-sign2 "~0.6.0" 3422 | aws4 "^1.2.1" 3423 | bl "~1.1.2" 3424 | caseless "~0.11.0" 3425 | combined-stream "~1.0.5" 3426 | extend "~3.0.0" 3427 | forever-agent "~0.6.1" 3428 | form-data "~1.0.0-rc4" 3429 | har-validator "~2.0.6" 3430 | hawk "~3.1.3" 3431 | http-signature "~1.1.0" 3432 | is-typedarray "~1.0.0" 3433 | isstream "~0.1.2" 3434 | json-stringify-safe "~5.0.1" 3435 | mime-types "~2.1.7" 3436 | node-uuid "~1.4.7" 3437 | oauth-sign "~0.8.1" 3438 | qs "~6.2.0" 3439 | stringstream "~0.0.4" 3440 | tough-cookie "~2.3.0" 3441 | tunnel-agent "~0.4.1" 3442 | 3443 | request@2.75.0: 3444 | version "2.75.0" 3445 | resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" 3446 | dependencies: 3447 | aws-sign2 "~0.6.0" 3448 | aws4 "^1.2.1" 3449 | bl "~1.1.2" 3450 | caseless "~0.11.0" 3451 | combined-stream "~1.0.5" 3452 | extend "~3.0.0" 3453 | forever-agent "~0.6.1" 3454 | form-data "~2.0.0" 3455 | har-validator "~2.0.6" 3456 | hawk "~3.1.3" 3457 | http-signature "~1.1.0" 3458 | is-typedarray "~1.0.0" 3459 | isstream "~0.1.2" 3460 | json-stringify-safe "~5.0.1" 3461 | mime-types "~2.1.7" 3462 | node-uuid "~1.4.7" 3463 | oauth-sign "~0.8.1" 3464 | qs "~6.2.0" 3465 | stringstream "~0.0.4" 3466 | tough-cookie "~2.3.0" 3467 | tunnel-agent "~0.4.1" 3468 | 3469 | request@2.78.0: 3470 | version "2.78.0" 3471 | resolved "https://registry.yarnpkg.com/request/-/request-2.78.0.tgz#e1c8dec346e1c81923b24acdb337f11decabe9cc" 3472 | dependencies: 3473 | aws-sign2 "~0.6.0" 3474 | aws4 "^1.2.1" 3475 | caseless "~0.11.0" 3476 | combined-stream "~1.0.5" 3477 | extend "~3.0.0" 3478 | forever-agent "~0.6.1" 3479 | form-data "~2.1.1" 3480 | har-validator "~2.0.6" 3481 | hawk "~3.1.3" 3482 | http-signature "~1.1.0" 3483 | is-typedarray "~1.0.0" 3484 | isstream "~0.1.2" 3485 | json-stringify-safe "~5.0.1" 3486 | mime-types "~2.1.7" 3487 | node-uuid "~1.4.7" 3488 | oauth-sign "~0.8.1" 3489 | qs "~6.3.0" 3490 | stringstream "~0.0.4" 3491 | tough-cookie "~2.3.0" 3492 | tunnel-agent "~0.4.1" 3493 | 3494 | request@2.79.0: 3495 | version "2.79.0" 3496 | resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" 3497 | dependencies: 3498 | aws-sign2 "~0.6.0" 3499 | aws4 "^1.2.1" 3500 | caseless "~0.11.0" 3501 | combined-stream "~1.0.5" 3502 | extend "~3.0.0" 3503 | forever-agent "~0.6.1" 3504 | form-data "~2.1.1" 3505 | har-validator "~2.0.6" 3506 | hawk "~3.1.3" 3507 | http-signature "~1.1.0" 3508 | is-typedarray "~1.0.0" 3509 | isstream "~0.1.2" 3510 | json-stringify-safe "~5.0.1" 3511 | mime-types "~2.1.7" 3512 | oauth-sign "~0.8.1" 3513 | qs "~6.3.0" 3514 | stringstream "~0.0.4" 3515 | tough-cookie "~2.3.0" 3516 | tunnel-agent "~0.4.1" 3517 | uuid "^3.0.0" 3518 | 3519 | request@^2.67.0, request@^2.69.0, request@^2.81.0: 3520 | version "2.81.0" 3521 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 3522 | dependencies: 3523 | aws-sign2 "~0.6.0" 3524 | aws4 "^1.2.1" 3525 | caseless "~0.12.0" 3526 | combined-stream "~1.0.5" 3527 | extend "~3.0.0" 3528 | forever-agent "~0.6.1" 3529 | form-data "~2.1.1" 3530 | har-validator "~4.2.1" 3531 | hawk "~3.1.3" 3532 | http-signature "~1.1.0" 3533 | is-typedarray "~1.0.0" 3534 | isstream "~0.1.2" 3535 | json-stringify-safe "~5.0.1" 3536 | mime-types "~2.1.7" 3537 | oauth-sign "~0.8.1" 3538 | performance-now "^0.2.0" 3539 | qs "~6.4.0" 3540 | safe-buffer "^5.0.1" 3541 | stringstream "~0.0.4" 3542 | tough-cookie "~2.3.0" 3543 | tunnel-agent "^0.6.0" 3544 | uuid "^3.0.0" 3545 | 3546 | require-uncached@^1.0.2: 3547 | version "1.0.3" 3548 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 3549 | dependencies: 3550 | caller-path "^0.1.0" 3551 | resolve-from "^1.0.0" 3552 | 3553 | resolve-from@^1.0.0: 3554 | version "1.0.1" 3555 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 3556 | 3557 | resolve@^1.1.6, resolve@^1.1.7: 3558 | version "1.3.3" 3559 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" 3560 | dependencies: 3561 | path-parse "^1.0.5" 3562 | 3563 | restore-cursor@^1.0.1: 3564 | version "1.0.1" 3565 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 3566 | dependencies: 3567 | exit-hook "^1.0.0" 3568 | onetime "^1.0.0" 3569 | 3570 | rimraf@2, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.5.1, rimraf@^2.6.1: 3571 | version "2.7.1" 3572 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 3573 | dependencies: 3574 | glob "^7.1.3" 3575 | 3576 | rsa-pem-from-mod-exp@^0.8.4: 3577 | version "0.8.4" 3578 | resolved "https://registry.yarnpkg.com/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz#362a42c6d304056d493b3f12bceabb2c6576a6d4" 3579 | 3580 | run-async@^0.1.0: 3581 | version "0.1.0" 3582 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 3583 | dependencies: 3584 | once "^1.3.0" 3585 | 3586 | run-parallel@^1.1.2: 3587 | version "1.1.6" 3588 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" 3589 | 3590 | rx-lite@^3.1.2: 3591 | version "3.1.2" 3592 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 3593 | 3594 | safe-buffer@^5.0.1, safe-buffer@~5.0.1: 3595 | version "5.0.1" 3596 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 3597 | 3598 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 3599 | version "2.1.2" 3600 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 3601 | 3602 | scmp@0.0.3: 3603 | version "0.0.3" 3604 | resolved "https://registry.yarnpkg.com/scmp/-/scmp-0.0.3.tgz#3648df2d7294641e7f78673ffc29681d9bad9073" 3605 | 3606 | sdp-transform@^2.3.0: 3607 | version "2.3.0" 3608 | resolved "https://registry.yarnpkg.com/sdp-transform/-/sdp-transform-2.3.0.tgz#57a9575942041d8577a869d7c74d4c3a0bd888f6" 3609 | 3610 | sdp@^1.5.0: 3611 | version "1.5.2" 3612 | resolved "https://registry.yarnpkg.com/sdp/-/sdp-1.5.2.tgz#57a6f24aa5e606357e7df0760990aadd6495ce9f" 3613 | 3614 | semver@5.3.0, semver@^5.3.0: 3615 | version "5.3.0" 3616 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 3617 | 3618 | semver@~5.0.1: 3619 | version "5.0.3" 3620 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 3621 | 3622 | send@0.15.1: 3623 | version "0.15.1" 3624 | resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" 3625 | dependencies: 3626 | debug "2.6.1" 3627 | depd "~1.1.0" 3628 | destroy "~1.0.4" 3629 | encodeurl "~1.0.1" 3630 | escape-html "~1.0.3" 3631 | etag "~1.8.0" 3632 | fresh "0.5.0" 3633 | http-errors "~1.6.1" 3634 | mime "1.3.4" 3635 | ms "0.7.2" 3636 | on-finished "~2.3.0" 3637 | range-parser "~1.2.0" 3638 | statuses "~1.3.1" 3639 | 3640 | serve-static@1.12.1: 3641 | version "1.12.1" 3642 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" 3643 | dependencies: 3644 | encodeurl "~1.0.1" 3645 | escape-html "~1.0.3" 3646 | parseurl "~1.3.1" 3647 | send "0.15.1" 3648 | 3649 | set-blocking@~2.0.0: 3650 | version "2.0.0" 3651 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 3652 | 3653 | set-immediate-shim@^1.0.1: 3654 | version "1.0.1" 3655 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 3656 | 3657 | setprototypeof@1.0.3: 3658 | version "1.0.3" 3659 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 3660 | 3661 | shelljs@^0.7.5: 3662 | version "0.7.7" 3663 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" 3664 | dependencies: 3665 | glob "^7.0.0" 3666 | interpret "^1.0.0" 3667 | rechoir "^0.6.2" 3668 | 3669 | signal-exit@^3.0.0: 3670 | version "3.0.2" 3671 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 3672 | 3673 | slash@^1.0.0: 3674 | version "1.0.0" 3675 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 3676 | 3677 | slice-ansi@0.0.4: 3678 | version "0.0.4" 3679 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 3680 | 3681 | snazzy@^7.0.0: 3682 | version "7.0.0" 3683 | resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-7.0.0.tgz#95edaccc4a8d6f80f4ac5cc7b520e8f8f9ac2325" 3684 | dependencies: 3685 | chalk "^1.1.0" 3686 | inherits "^2.0.1" 3687 | minimist "^1.1.1" 3688 | readable-stream "^2.0.6" 3689 | standard-json "^1.0.0" 3690 | text-table "^0.2.0" 3691 | 3692 | sntp@1.x.x: 3693 | version "1.0.9" 3694 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 3695 | dependencies: 3696 | hoek "2.x.x" 3697 | 3698 | source-map-support@^0.4.2: 3699 | version "0.4.15" 3700 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" 3701 | dependencies: 3702 | source-map "^0.5.6" 3703 | 3704 | source-map@^0.4.2: 3705 | version "0.4.4" 3706 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 3707 | dependencies: 3708 | amdefine ">=0.0.4" 3709 | 3710 | source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0: 3711 | version "0.5.6" 3712 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 3713 | 3714 | source-map@^0.6.1, source-map@~0.6.1: 3715 | version "0.6.1" 3716 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 3717 | 3718 | sprintf-js@^1.0.3, sprintf-js@~1.0.2: 3719 | version "1.0.3" 3720 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 3721 | 3722 | sqlite3@^3.1.8: 3723 | version "3.1.8" 3724 | resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-3.1.8.tgz#4cbcf965d8b901d1b1015cbc7fc415aae157dfaa" 3725 | dependencies: 3726 | nan "~2.4.0" 3727 | node-pre-gyp "~0.6.31" 3728 | 3729 | sqlite@^2.7.0: 3730 | version "2.7.0" 3731 | resolved "https://registry.yarnpkg.com/sqlite/-/sqlite-2.7.0.tgz#37ab2f8b4851478d6da4c6f8b3723100b8162009" 3732 | dependencies: 3733 | sqlite3 "^3.1.8" 3734 | 3735 | sshpk@^1.7.0: 3736 | version "1.16.1" 3737 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 3738 | dependencies: 3739 | asn1 "~0.2.3" 3740 | assert-plus "^1.0.0" 3741 | bcrypt-pbkdf "^1.0.0" 3742 | dashdash "^1.12.0" 3743 | ecc-jsbn "~0.1.1" 3744 | getpass "^0.1.1" 3745 | jsbn "~0.1.0" 3746 | safer-buffer "^2.0.2" 3747 | tweetnacl "~0.14.0" 3748 | 3749 | stack-trace@0.0.x: 3750 | version "0.0.9" 3751 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" 3752 | 3753 | standard-engine@~7.0.0: 3754 | version "7.0.0" 3755 | resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690" 3756 | dependencies: 3757 | deglob "^2.1.0" 3758 | get-stdin "^5.0.1" 3759 | minimist "^1.1.0" 3760 | pkg-conf "^2.0.0" 3761 | 3762 | standard-json@^1.0.0: 3763 | version "1.0.2" 3764 | resolved "https://registry.yarnpkg.com/standard-json/-/standard-json-1.0.2.tgz#82dea4a14c78cd9e35d38cde4b88ac6b62596a23" 3765 | dependencies: 3766 | concat-stream "^1.5.0" 3767 | 3768 | standard@^10.0.2: 3769 | version "10.0.2" 3770 | resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.2.tgz#974c1c53cc865b075a4b576e78441e1695daaf7b" 3771 | dependencies: 3772 | eslint "~3.19.0" 3773 | eslint-config-standard "10.2.1" 3774 | eslint-config-standard-jsx "4.0.1" 3775 | eslint-plugin-import "~2.2.0" 3776 | eslint-plugin-node "~4.2.2" 3777 | eslint-plugin-promise "~3.5.0" 3778 | eslint-plugin-react "~6.10.0" 3779 | eslint-plugin-standard "~3.0.1" 3780 | standard-engine "~7.0.0" 3781 | 3782 | "statuses@>= 1.3.1 < 2", statuses@~1.3.1: 3783 | version "1.3.1" 3784 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 3785 | 3786 | string-width@^1.0.1: 3787 | version "1.0.2" 3788 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 3789 | dependencies: 3790 | code-point-at "^1.0.0" 3791 | is-fullwidth-code-point "^1.0.0" 3792 | strip-ansi "^3.0.0" 3793 | 3794 | string-width@^2.0.0: 3795 | version "2.0.0" 3796 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 3797 | dependencies: 3798 | is-fullwidth-code-point "^2.0.0" 3799 | strip-ansi "^3.0.0" 3800 | 3801 | string.prototype.startswith@^0.2.0: 3802 | version "0.2.0" 3803 | resolved "https://registry.yarnpkg.com/string.prototype.startswith/-/string.prototype.startswith-0.2.0.tgz#da68982e353a4e9ac4a43b450a2045d1c445ae7b" 3804 | 3805 | string@^3.3.3: 3806 | version "3.3.3" 3807 | resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0" 3808 | 3809 | string_decoder@~0.10.x: 3810 | version "0.10.31" 3811 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 3812 | 3813 | string_decoder@~1.0.0: 3814 | version "1.0.0" 3815 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 3816 | dependencies: 3817 | buffer-shims "~1.0.0" 3818 | 3819 | stringstream@~0.0.4: 3820 | version "0.0.6" 3821 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" 3822 | 3823 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 3824 | version "3.0.1" 3825 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3826 | dependencies: 3827 | ansi-regex "^2.0.0" 3828 | 3829 | strip-bom@^2.0.0: 3830 | version "2.0.0" 3831 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 3832 | dependencies: 3833 | is-utf8 "^0.2.0" 3834 | 3835 | strip-bom@^3.0.0: 3836 | version "3.0.0" 3837 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 3838 | 3839 | strip-json-comments@~2.0.1: 3840 | version "2.0.1" 3841 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 3842 | 3843 | sum-up@^1.0.1: 3844 | version "1.0.3" 3845 | resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" 3846 | dependencies: 3847 | chalk "^1.0.0" 3848 | 3849 | supports-color@3.1.2, supports-color@^3.1.2: 3850 | version "3.1.2" 3851 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 3852 | dependencies: 3853 | has-flag "^1.0.0" 3854 | 3855 | supports-color@^2.0.0: 3856 | version "2.0.0" 3857 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 3858 | 3859 | table@^3.7.8: 3860 | version "3.8.3" 3861 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" 3862 | dependencies: 3863 | ajv "^4.7.0" 3864 | ajv-keywords "^1.0.0" 3865 | chalk "^1.1.1" 3866 | lodash "^4.0.0" 3867 | slice-ansi "0.0.4" 3868 | string-width "^2.0.0" 3869 | 3870 | tar-pack@^3.4.0: 3871 | version "3.4.0" 3872 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 3873 | dependencies: 3874 | debug "^2.2.0" 3875 | fstream "^1.0.10" 3876 | fstream-ignore "^1.0.5" 3877 | once "^1.3.3" 3878 | readable-stream "^2.1.4" 3879 | rimraf "^2.5.1" 3880 | tar "^2.2.1" 3881 | uid-number "^0.0.6" 3882 | 3883 | tar@^2.2.1: 3884 | version "2.2.2" 3885 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" 3886 | dependencies: 3887 | block-stream "*" 3888 | fstream "^1.0.12" 3889 | inherits "2" 3890 | 3891 | test-value@^2.1.0: 3892 | version "2.1.0" 3893 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" 3894 | dependencies: 3895 | array-back "^1.0.3" 3896 | typical "^2.6.0" 3897 | 3898 | text-table@^0.2.0, text-table@~0.2.0: 3899 | version "0.2.0" 3900 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 3901 | 3902 | through2@^0.6.3: 3903 | version "0.6.5" 3904 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" 3905 | dependencies: 3906 | readable-stream ">=1.0.33-1 <1.1.0-0" 3907 | xtend ">=4.0.0 <4.1.0-0" 3908 | 3909 | through@^2.3.6, through@~2.3.4: 3910 | version "2.3.8" 3911 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 3912 | 3913 | to-fast-properties@^1.0.1: 3914 | version "1.0.3" 3915 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 3916 | 3917 | topo@1.x.x: 3918 | version "1.1.0" 3919 | resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" 3920 | dependencies: 3921 | hoek "2.x.x" 3922 | 3923 | tough-cookie@~2.3.0: 3924 | version "2.3.4" 3925 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 3926 | dependencies: 3927 | punycode "^1.4.1" 3928 | 3929 | trim-right@^1.0.1: 3930 | version "1.0.1" 3931 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 3932 | 3933 | trim@0.0.1: 3934 | version "0.0.1" 3935 | resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" 3936 | 3937 | tryit@^1.0.1: 3938 | version "1.0.3" 3939 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 3940 | 3941 | tunnel-agent@^0.6.0: 3942 | version "0.6.0" 3943 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 3944 | dependencies: 3945 | safe-buffer "^5.0.1" 3946 | 3947 | tunnel-agent@~0.4.1: 3948 | version "0.4.3" 3949 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 3950 | 3951 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 3952 | version "0.14.5" 3953 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 3954 | 3955 | twilio@^2.11.1: 3956 | version "2.11.1" 3957 | resolved "https://registry.yarnpkg.com/twilio/-/twilio-2.11.1.tgz#451099467313c56b3767994df2d19062f10ef8c4" 3958 | dependencies: 3959 | deprecate "^0.1.0" 3960 | jsonwebtoken "5.4.x" 3961 | q "0.9.7" 3962 | request "2.74.x" 3963 | scmp "0.0.3" 3964 | string.prototype.startswith "^0.2.0" 3965 | underscore "1.x" 3966 | 3967 | type-check@~0.3.2: 3968 | version "0.3.2" 3969 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 3970 | dependencies: 3971 | prelude-ls "~1.1.2" 3972 | 3973 | type-detect@0.1.1: 3974 | version "0.1.1" 3975 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" 3976 | 3977 | type-detect@^1.0.0: 3978 | version "1.0.0" 3979 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" 3980 | 3981 | type-is@~1.6.14: 3982 | version "1.6.15" 3983 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 3984 | dependencies: 3985 | media-typer "0.3.0" 3986 | mime-types "~2.1.15" 3987 | 3988 | typedarray@^0.0.6: 3989 | version "0.0.6" 3990 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 3991 | 3992 | typical@^2.6.0: 3993 | version "2.6.0" 3994 | resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.0.tgz#89d51554ab139848a65bcc2c8772f8fb450c40ed" 3995 | 3996 | uglify-js@^3.1.4: 3997 | version "3.7.3" 3998 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" 3999 | dependencies: 4000 | commander "~2.20.3" 4001 | source-map "~0.6.1" 4002 | 4003 | uid-number@^0.0.6: 4004 | version "0.0.6" 4005 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 4006 | 4007 | ultron@1.0.x: 4008 | version "1.0.2" 4009 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 4010 | 4011 | ultron@~1.1.0: 4012 | version "1.1.0" 4013 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" 4014 | 4015 | underscore@1.x: 4016 | version "1.8.3" 4017 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" 4018 | 4019 | uniq@^1.0.1: 4020 | version "1.0.1" 4021 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 4022 | 4023 | unpipe@1.0.0, unpipe@~1.0.0: 4024 | version "1.0.0" 4025 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 4026 | 4027 | url-join@^1.1.0: 4028 | version "1.1.0" 4029 | resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" 4030 | 4031 | urlsafe-base64@^1.0.0: 4032 | version "1.0.0" 4033 | resolved "https://registry.yarnpkg.com/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz#23f89069a6c62f46cf3a1d3b00169cefb90be0c6" 4034 | 4035 | user-home@^1.1.1: 4036 | version "1.1.1" 4037 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 4038 | 4039 | user-home@^2.0.0: 4040 | version "2.0.0" 4041 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 4042 | dependencies: 4043 | os-homedir "^1.0.0" 4044 | 4045 | util-deprecate@~1.0.1: 4046 | version "1.0.2" 4047 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 4048 | 4049 | utils-merge@1.0.0: 4050 | version "1.0.0" 4051 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 4052 | 4053 | uuid@^3.0.0, uuid@^3.0.1: 4054 | version "3.0.1" 4055 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 4056 | 4057 | v8flags@^2.0.10: 4058 | version "2.1.1" 4059 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 4060 | dependencies: 4061 | user-home "^1.1.1" 4062 | 4063 | vary@~1.1.0: 4064 | version "1.1.1" 4065 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" 4066 | 4067 | verror@1.3.6: 4068 | version "1.3.6" 4069 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 4070 | dependencies: 4071 | extsprintf "1.0.2" 4072 | 4073 | ware@^1.3.0: 4074 | version "1.3.0" 4075 | resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" 4076 | dependencies: 4077 | wrap-fn "^0.1.0" 4078 | 4079 | webrtc-adapter@^3.2.0: 4080 | version "3.3.4" 4081 | resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-3.3.4.tgz#19cbb7e7674033385eec723bd7ab8f5e6a7300b5" 4082 | dependencies: 4083 | sdp "^1.5.0" 4084 | 4085 | which@^1.1.1: 4086 | version "1.2.14" 4087 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 4088 | dependencies: 4089 | isexe "^2.0.0" 4090 | 4091 | wide-align@^1.1.0: 4092 | version "1.1.1" 4093 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.1.tgz#d2ea8aa2db2e66467e8b60cc3e897de3bc4429e6" 4094 | dependencies: 4095 | string-width "^2.0.0" 4096 | 4097 | window-size@^0.1.2: 4098 | version "0.1.4" 4099 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" 4100 | 4101 | winston-memory@0.1.0: 4102 | version "0.1.0" 4103 | resolved "https://registry.yarnpkg.com/winston-memory/-/winston-memory-0.1.0.tgz#722bcfd59ec92d075c571dc26a4e2dba7c437b6d" 4104 | 4105 | winston@^2.3.1: 4106 | version "2.3.1" 4107 | resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" 4108 | dependencies: 4109 | async "~1.0.0" 4110 | colors "1.0.x" 4111 | cycle "1.0.x" 4112 | eyes "0.1.x" 4113 | isstream "0.1.x" 4114 | stack-trace "0.0.x" 4115 | 4116 | wordwrap@^1.0.0, wordwrap@~1.0.0: 4117 | version "1.0.0" 4118 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 4119 | 4120 | wordwrap@~0.0.2: 4121 | version "0.0.3" 4122 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 4123 | 4124 | wrap-ansi@^2.0.0: 4125 | version "2.1.0" 4126 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 4127 | dependencies: 4128 | string-width "^1.0.1" 4129 | strip-ansi "^3.0.1" 4130 | 4131 | wrap-fn@^0.1.0: 4132 | version "0.1.5" 4133 | resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845" 4134 | dependencies: 4135 | co "3.1.0" 4136 | 4137 | wrappy@1: 4138 | version "1.0.2" 4139 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 4140 | 4141 | write@^0.2.1: 4142 | version "0.2.1" 4143 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 4144 | dependencies: 4145 | mkdirp "^0.5.1" 4146 | 4147 | ws@^1.1.4: 4148 | version "1.1.5" 4149 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 4150 | dependencies: 4151 | options ">=0.0.5" 4152 | ultron "1.0.x" 4153 | 4154 | ws@^2.2.2: 4155 | version "2.3.1" 4156 | resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" 4157 | dependencies: 4158 | safe-buffer "~5.0.1" 4159 | ultron "~1.1.0" 4160 | 4161 | "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1: 4162 | version "4.0.2" 4163 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 4164 | 4165 | y18n@^3.2.0: 4166 | version "3.2.2" 4167 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" 4168 | 4169 | yargs@3.29.0: 4170 | version "3.29.0" 4171 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c" 4172 | dependencies: 4173 | camelcase "^1.2.1" 4174 | cliui "^3.0.3" 4175 | decamelize "^1.0.0" 4176 | os-locale "^1.4.0" 4177 | window-size "^0.1.2" 4178 | y18n "^3.2.0" 4179 | --------------------------------------------------------------------------------