├── .eslintrc.json ├── .gitignore ├── LICENSE ├── README.md ├── index.js ├── package.json └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "env": { 4 | "node": true, 5 | "es6": true 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 2017 9 | }, 10 | "rules": { 11 | "no-await-in-loop": "warn", 12 | "no-compare-neg-zero": "error", 13 | "no-console": "off", 14 | "no-extra-parens": ["warn", "all", { 15 | "nestedBinaryExpressions": false 16 | }], 17 | "no-template-curly-in-string": "error", 18 | "no-unsafe-negation": "error", 19 | "valid-jsdoc": ["warn", { 20 | "requireReturn": false, 21 | "requireReturnDescription": false, 22 | "preferType": { 23 | "String": "string", 24 | "Number": "number", 25 | "Boolean": "boolean", 26 | "Symbol": "symbol", 27 | "function": "Function", 28 | "object": "Object", 29 | "date": "Date", 30 | "error": "Error" 31 | } 32 | }], 33 | 34 | "accessor-pairs": "warn", 35 | "array-callback-return": "error", 36 | "complexity": "warn", 37 | "consistent-return": "error", 38 | "curly": ["error", "multi-line", "consistent"], 39 | "dot-location": ["error", "property"], 40 | "dot-notation": "error", 41 | "eqeqeq": "error", 42 | "no-empty-function": "error", 43 | "no-floating-decimal": "error", 44 | "no-implied-eval": "error", 45 | "no-invalid-this": "error", 46 | "no-lone-blocks": "error", 47 | "no-multi-spaces": "error", 48 | "no-new-func": "error", 49 | "no-new-wrappers": "error", 50 | "no-new": "error", 51 | "no-octal-escape": "error", 52 | "no-return-assign": "error", 53 | "no-return-await": "error", 54 | "no-self-compare": "error", 55 | "no-sequences": "error", 56 | "no-throw-literal": "error", 57 | "no-unmodified-loop-condition": "error", 58 | "no-unused-expressions": "error", 59 | "no-useless-call": "error", 60 | "no-useless-concat": "error", 61 | "no-useless-escape": "error", 62 | "no-useless-return": "error", 63 | "no-void": "error", 64 | "no-warning-comments": "warn", 65 | "prefer-promise-reject-errors": "error", 66 | "require-await": "warn", 67 | "wrap-iife": "error", 68 | "yoda": "error", 69 | 70 | "no-label-var": "error", 71 | "no-shadow": "error", 72 | "no-undef-init": "error", 73 | 74 | "callback-return": "error", 75 | "handle-callback-err": "error", 76 | "no-mixed-requires": "error", 77 | "no-new-require": "error", 78 | "no-path-concat": "error", 79 | "no-process-env": "error", 80 | 81 | "array-bracket-spacing": "error", 82 | "block-spacing": "error", 83 | "brace-style": ["error", "1tbs", { "allowSingleLine": true }], 84 | "camelcase": "error", 85 | "capitalized-comments": ["error", "always", { "ignoreConsecutiveComments": true }], 86 | "comma-dangle": "error", 87 | "comma-spacing": "error", 88 | "comma-style": "error", 89 | "computed-property-spacing": "error", 90 | "consistent-this": "error", 91 | "eol-last": "error", 92 | "func-names": "error", 93 | "func-style": ["error", "declaration", { "allowArrowFunctions": true }], 94 | "id-length": ["error", { "exceptions": ["i", "j", "a", "b"] }], 95 | "indent": "off", 96 | "indent-legacy": ["error", "tab", { "SwitchCase": 1 }], 97 | "key-spacing": "error", 98 | "keyword-spacing": ["error", { 99 | "overrides": { 100 | "if": { "after": false }, 101 | "for": { "after": false }, 102 | "while": { "after": false }, 103 | "catch": { "after": false }, 104 | "switch": { "after": false } 105 | } 106 | }], 107 | "max-depth": "error", 108 | "max-len": ["error", 120, 2], 109 | "max-nested-callbacks": ["error", { "max": 4 }], 110 | "max-statements-per-line": ["error", { "max": 2 }], 111 | "new-cap": "error", 112 | "newline-per-chained-call": ["error", { "ignoreChainWithDepth": 3 }], 113 | "no-array-constructor": "error", 114 | "no-bitwise": "warn", 115 | "no-inline-comments": "error", 116 | "no-lonely-if": "error", 117 | "no-mixed-operators": "error", 118 | "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }], 119 | "no-new-object": "error", 120 | "no-spaced-func": "error", 121 | "no-trailing-spaces": "error", 122 | "no-unneeded-ternary": "error", 123 | "no-whitespace-before-property": "error", 124 | "nonblock-statement-body-position": "error", 125 | "object-curly-newline": "error", 126 | "object-curly-spacing": ["error", "always"], 127 | "operator-assignment": "error", 128 | "operator-linebreak": ["error", "after"], 129 | "padded-blocks": ["error", "never"], 130 | "quote-props": ["error", "as-needed"], 131 | "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], 132 | "semi-spacing": "error", 133 | "semi": "error", 134 | "space-before-blocks": "error", 135 | "space-before-function-paren": ["error", "never"], 136 | "space-in-parens": "error", 137 | "space-infix-ops": "error", 138 | "space-unary-ops": "error", 139 | "spaced-comment": "error", 140 | "template-tag-spacing": "error", 141 | "unicode-bom": "error", 142 | 143 | "arrow-body-style": "error", 144 | "arrow-parens": ["error", "as-needed"], 145 | "arrow-spacing": "error", 146 | "no-duplicate-imports": "error", 147 | "no-useless-computed-key": "error", 148 | "no-useless-constructor": "error", 149 | "prefer-arrow-callback": "error", 150 | "prefer-rest-params": "error", 151 | "prefer-spread": "error", 152 | "prefer-template": "error", 153 | "rest-spread-spacing": "error", 154 | "template-curly-spacing": "error", 155 | "yield-star-spacing": "error" 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | config.json 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | Copyright 2018 Schuyler Cebulskie 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | http://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. 191 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # webhook-filter 2 | This is a simple application that filters out push events for specific branches of specific repositories from a GitHub 3 | webhook, forwarding all others to another destination. 4 | 5 | ## Configuration 6 | All configuration is specified in a `config.json` file in the current working directory when launching the application. 7 | The blacklist contains repo names and their corresponding blacklisted branches where each branch is a regex pattern. If any pattern for a given repo matches, the push event will not be forwarded to the configured webhook URL. 8 | 9 | ### Example 10 | ```json 11 | { 12 | "secret": "This is a secret.", 13 | "webhook": "https://some-webhook.site/webhook", 14 | "blacklist": { 15 | "someone/some-repo": ["some-branch", "some-other-branch"], 16 | "someone/cooler-repo": ["any/.*"] 17 | } 18 | } 19 | ``` 20 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const crypto = require('crypto'); 3 | const http = require('http'); 4 | const bl = require('bl'); 5 | const snekfetch = require('snekfetch'); 6 | 7 | // Load config and build list of refs to block 8 | const config = JSON.parse(fs.readFileSync('./config.json', 'utf8')); 9 | const refs = {}; 10 | for(const [repo, branches] of Object.entries(config.blacklist)) refs[repo] = branches.map(b => `refs/heads/${b}`); 11 | 12 | http.createServer((req, res) => { 13 | // Make sure all headers are present 14 | const signature = req.headers['x-hub-signature']; 15 | const event = req.headers['x-github-event']; 16 | const id = req.headers['x-github-delivery']; 17 | if(!signature || !event || !id) { 18 | res.writeHead(400, { 'Content-type': 'application/json' }); 19 | res.end('{"error":"Invalid request headers."}'); 20 | return; 21 | } 22 | 23 | req.pipe(bl(async(err, data) => { 24 | // Handle unknown errors 25 | if(err) { 26 | res.writeHead(400, { 'Content-type': 'application/json' }); 27 | res.end(JSON.stringify({ error: err.message })); 28 | return; 29 | } 30 | 31 | // Make sure the request isn't too large 32 | if(data.length > 30720) { 33 | res.writeHead(400, { 'Content-type': 'application/json' }); 34 | res.end('{"error":"Request too large."}'); 35 | return; 36 | } 37 | 38 | // Verify the secret 39 | const secret = `sha1=${crypto.createHmac('sha1', config.secret).update(data).digest('hex')}`; 40 | if(!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(secret))) { 41 | res.writeHead(400, { 'Content-type': 'application/json' }); 42 | res.end('{"error":"Invalid secret."}'); 43 | return; 44 | } 45 | 46 | // Parse the data 47 | let payload; 48 | try { 49 | payload = JSON.parse(data.toString()); 50 | } catch(err2) { 51 | res.writeHead(400, { 'Content-type': 'application/json' }); 52 | res.end(JSON.stringify({ error: err2.message })); 53 | return; 54 | } 55 | 56 | // Ignore the event if it's for a push to a blacklisted repo/branch combo 57 | const repo = payload.repository && payload.ref ? payload.repository.full_name : null; 58 | if(event === 'push' && repo && refs[repo]) { 59 | if(refs[repo].some(pattern => payload.ref.match(pattern))) { 60 | console.log(`Skipping ${event} event for ${repo}#${payload.ref}: ${payload.after}`); 61 | res.writeHead(200, { 'Content-type': 'application/json' }); 62 | res.end('{"message":"Skipped event for blacklisted repository/branch."}'); 63 | return; 64 | } 65 | } 66 | 67 | // Forward event to Discord's webhook 68 | try { 69 | await snekfetch.post(config.webhook, { 70 | data: payload, 71 | headers: { 72 | 'content-type': 'application/json', 73 | 'x-github-event': event, 74 | 'x-github-delivery': id 75 | } 76 | }); 77 | } catch(err2) { 78 | console.error('Error while forwarding event to Discord:', err2); 79 | res.writeHead(500, { 'Content-type': 'application/json' }); 80 | res.end(JSON.stringify({ error: err2.message })); 81 | return; 82 | } 83 | 84 | res.statusCode = 204; 85 | res.end(); 86 | })); 87 | }).listen(1337, err => { 88 | if(err) console.error('Error starting HTTP server:', err); 89 | else console.log('Listening on port 1337.'); 90 | }); 91 | 92 | process.on('unhandledRejection', err => { 93 | console.error('Unhandled Promise rejection:', err); 94 | }); 95 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord.js-webhook-filter", 3 | "version": "0.1.0", 4 | "description": "Filters events based on repo/branch from GitHub webhooks", 5 | "license": "Apache-2.0", 6 | "author": "Schuyler Cebulskie (https://gawdl3y.com/)", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/discordjs/webhook-filter.git" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/discordjs/webhook-filter/issues" 13 | }, 14 | "keywords": [ 15 | "discord", 16 | "webhook", 17 | "github" 18 | ], 19 | "scripts": { 20 | "test": "npm run lint", 21 | "lint": "eslint index.js", 22 | "lint:fix": "eslint --fix index.js" 23 | }, 24 | "main": "index", 25 | "bin": { 26 | "webhook-filter": "./index.js" 27 | }, 28 | "dependencies": { 29 | "bl": "^1.2.1", 30 | "snekfetch": "^3.6.1" 31 | }, 32 | "devDependencies": { 33 | "eslint": "^4.15.0" 34 | }, 35 | "engines": { 36 | "node": ">=8.0.0" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | acorn-jsx@^3.0.0: 6 | version "3.0.1" 7 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 8 | dependencies: 9 | acorn "^3.0.4" 10 | 11 | acorn@^3.0.4: 12 | version "3.3.0" 13 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 14 | 15 | acorn@^5.5.0: 16 | version "5.7.4" 17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 18 | 19 | ajv-keywords@^2.1.0: 20 | version "2.1.1" 21 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" 22 | 23 | ajv@^5.2.3, ajv@^5.3.0: 24 | version "5.5.2" 25 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 26 | dependencies: 27 | co "^4.6.0" 28 | fast-deep-equal "^1.0.0" 29 | fast-json-stable-stringify "^2.0.0" 30 | json-schema-traverse "^0.3.0" 31 | 32 | ansi-escapes@^3.0.0: 33 | version "3.0.0" 34 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" 35 | 36 | ansi-regex@^2.0.0: 37 | version "2.1.1" 38 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 39 | 40 | ansi-regex@^3.0.0: 41 | version "3.0.0" 42 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 43 | 44 | ansi-styles@^2.2.1: 45 | version "2.2.1" 46 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 47 | 48 | ansi-styles@^3.1.0: 49 | version "3.2.0" 50 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 51 | dependencies: 52 | color-convert "^1.9.0" 53 | 54 | argparse@^1.0.7: 55 | version "1.0.9" 56 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 57 | dependencies: 58 | sprintf-js "~1.0.2" 59 | 60 | array-union@^1.0.1: 61 | version "1.0.2" 62 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 63 | dependencies: 64 | array-uniq "^1.0.1" 65 | 66 | array-uniq@^1.0.1: 67 | version "1.0.3" 68 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 69 | 70 | arrify@^1.0.0: 71 | version "1.0.1" 72 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 73 | 74 | babel-code-frame@^6.22.0: 75 | version "6.26.0" 76 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 77 | dependencies: 78 | chalk "^1.1.3" 79 | esutils "^2.0.2" 80 | js-tokens "^3.0.2" 81 | 82 | balanced-match@^1.0.0: 83 | version "1.0.0" 84 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 85 | 86 | bl@^1.2.1: 87 | version "1.2.1" 88 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" 89 | dependencies: 90 | readable-stream "^2.0.5" 91 | 92 | brace-expansion@^1.1.7: 93 | version "1.1.8" 94 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 95 | dependencies: 96 | balanced-match "^1.0.0" 97 | concat-map "0.0.1" 98 | 99 | caller-path@^0.1.0: 100 | version "0.1.0" 101 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 102 | dependencies: 103 | callsites "^0.2.0" 104 | 105 | callsites@^0.2.0: 106 | version "0.2.0" 107 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 108 | 109 | chalk@^1.1.3: 110 | version "1.1.3" 111 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 112 | dependencies: 113 | ansi-styles "^2.2.1" 114 | escape-string-regexp "^1.0.2" 115 | has-ansi "^2.0.0" 116 | strip-ansi "^3.0.0" 117 | supports-color "^2.0.0" 118 | 119 | chalk@^2.0.0, chalk@^2.1.0: 120 | version "2.3.0" 121 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" 122 | dependencies: 123 | ansi-styles "^3.1.0" 124 | escape-string-regexp "^1.0.5" 125 | supports-color "^4.0.0" 126 | 127 | chardet@^0.4.0: 128 | version "0.4.2" 129 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 130 | 131 | circular-json@^0.3.1: 132 | version "0.3.3" 133 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 134 | 135 | cli-cursor@^2.1.0: 136 | version "2.1.0" 137 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 138 | dependencies: 139 | restore-cursor "^2.0.0" 140 | 141 | cli-width@^2.0.0: 142 | version "2.2.0" 143 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 144 | 145 | co@^4.6.0: 146 | version "4.6.0" 147 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 148 | 149 | color-convert@^1.9.0: 150 | version "1.9.1" 151 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 152 | dependencies: 153 | color-name "^1.1.1" 154 | 155 | color-name@^1.1.1: 156 | version "1.1.3" 157 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 158 | 159 | concat-map@0.0.1: 160 | version "0.0.1" 161 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 162 | 163 | concat-stream@^1.6.0: 164 | version "1.6.0" 165 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 166 | dependencies: 167 | inherits "^2.0.3" 168 | readable-stream "^2.2.2" 169 | typedarray "^0.0.6" 170 | 171 | core-util-is@~1.0.0: 172 | version "1.0.2" 173 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 174 | 175 | cross-spawn@^5.1.0: 176 | version "5.1.0" 177 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 178 | dependencies: 179 | lru-cache "^4.0.1" 180 | shebang-command "^1.2.0" 181 | which "^1.2.9" 182 | 183 | debug@^3.1.0: 184 | version "3.1.0" 185 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 186 | dependencies: 187 | ms "2.0.0" 188 | 189 | deep-is@~0.1.3: 190 | version "0.1.3" 191 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 192 | 193 | del@^2.0.2: 194 | version "2.2.2" 195 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 196 | dependencies: 197 | globby "^5.0.0" 198 | is-path-cwd "^1.0.0" 199 | is-path-in-cwd "^1.0.0" 200 | object-assign "^4.0.1" 201 | pify "^2.0.0" 202 | pinkie-promise "^2.0.0" 203 | rimraf "^2.2.8" 204 | 205 | doctrine@^2.1.0: 206 | version "2.1.0" 207 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 208 | dependencies: 209 | esutils "^2.0.2" 210 | 211 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 212 | version "1.0.5" 213 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 214 | 215 | eslint-scope@^3.7.1: 216 | version "3.7.1" 217 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" 218 | dependencies: 219 | esrecurse "^4.1.0" 220 | estraverse "^4.1.1" 221 | 222 | eslint-visitor-keys@^1.0.0: 223 | version "1.0.0" 224 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 225 | 226 | eslint@^4.15.0: 227 | version "4.19.1" 228 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" 229 | dependencies: 230 | ajv "^5.3.0" 231 | babel-code-frame "^6.22.0" 232 | chalk "^2.1.0" 233 | concat-stream "^1.6.0" 234 | cross-spawn "^5.1.0" 235 | debug "^3.1.0" 236 | doctrine "^2.1.0" 237 | eslint-scope "^3.7.1" 238 | eslint-visitor-keys "^1.0.0" 239 | espree "^3.5.4" 240 | esquery "^1.0.0" 241 | esutils "^2.0.2" 242 | file-entry-cache "^2.0.0" 243 | functional-red-black-tree "^1.0.1" 244 | glob "^7.1.2" 245 | globals "^11.0.1" 246 | ignore "^3.3.3" 247 | imurmurhash "^0.1.4" 248 | inquirer "^3.0.6" 249 | is-resolvable "^1.0.0" 250 | js-yaml "^3.9.1" 251 | json-stable-stringify-without-jsonify "^1.0.1" 252 | levn "^0.3.0" 253 | lodash "^4.17.4" 254 | minimatch "^3.0.2" 255 | mkdirp "^0.5.1" 256 | natural-compare "^1.4.0" 257 | optionator "^0.8.2" 258 | path-is-inside "^1.0.2" 259 | pluralize "^7.0.0" 260 | progress "^2.0.0" 261 | regexpp "^1.0.1" 262 | require-uncached "^1.0.3" 263 | semver "^5.3.0" 264 | strip-ansi "^4.0.0" 265 | strip-json-comments "~2.0.1" 266 | table "4.0.2" 267 | text-table "~0.2.0" 268 | 269 | espree@^3.5.4: 270 | version "3.5.4" 271 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" 272 | dependencies: 273 | acorn "^5.5.0" 274 | acorn-jsx "^3.0.0" 275 | 276 | esprima@^4.0.0: 277 | version "4.0.0" 278 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 279 | 280 | esquery@^1.0.0: 281 | version "1.0.0" 282 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" 283 | dependencies: 284 | estraverse "^4.0.0" 285 | 286 | esrecurse@^4.1.0: 287 | version "4.2.0" 288 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" 289 | dependencies: 290 | estraverse "^4.1.0" 291 | object-assign "^4.0.1" 292 | 293 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 294 | version "4.2.0" 295 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 296 | 297 | esutils@^2.0.2: 298 | version "2.0.2" 299 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 300 | 301 | external-editor@^2.0.4: 302 | version "2.1.0" 303 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" 304 | dependencies: 305 | chardet "^0.4.0" 306 | iconv-lite "^0.4.17" 307 | tmp "^0.0.33" 308 | 309 | fast-deep-equal@^1.0.0: 310 | version "1.0.0" 311 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 312 | 313 | fast-json-stable-stringify@^2.0.0: 314 | version "2.0.0" 315 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 316 | 317 | fast-levenshtein@~2.0.4: 318 | version "2.0.6" 319 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 320 | 321 | figures@^2.0.0: 322 | version "2.0.0" 323 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 324 | dependencies: 325 | escape-string-regexp "^1.0.5" 326 | 327 | file-entry-cache@^2.0.0: 328 | version "2.0.0" 329 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 330 | dependencies: 331 | flat-cache "^1.2.1" 332 | object-assign "^4.0.1" 333 | 334 | flat-cache@^1.2.1: 335 | version "1.3.0" 336 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" 337 | dependencies: 338 | circular-json "^0.3.1" 339 | del "^2.0.2" 340 | graceful-fs "^4.1.2" 341 | write "^0.2.1" 342 | 343 | fs.realpath@^1.0.0: 344 | version "1.0.0" 345 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 346 | 347 | functional-red-black-tree@^1.0.1: 348 | version "1.0.1" 349 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 350 | 351 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: 352 | version "7.1.2" 353 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 354 | dependencies: 355 | fs.realpath "^1.0.0" 356 | inflight "^1.0.4" 357 | inherits "2" 358 | minimatch "^3.0.4" 359 | once "^1.3.0" 360 | path-is-absolute "^1.0.0" 361 | 362 | globals@^11.0.1: 363 | version "11.1.0" 364 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" 365 | 366 | globby@^5.0.0: 367 | version "5.0.0" 368 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 369 | dependencies: 370 | array-union "^1.0.1" 371 | arrify "^1.0.0" 372 | glob "^7.0.3" 373 | object-assign "^4.0.1" 374 | pify "^2.0.0" 375 | pinkie-promise "^2.0.0" 376 | 377 | graceful-fs@^4.1.2: 378 | version "4.1.11" 379 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 380 | 381 | has-ansi@^2.0.0: 382 | version "2.0.0" 383 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 384 | dependencies: 385 | ansi-regex "^2.0.0" 386 | 387 | has-flag@^2.0.0: 388 | version "2.0.0" 389 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 390 | 391 | iconv-lite@^0.4.17: 392 | version "0.4.19" 393 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 394 | 395 | ignore@^3.3.3: 396 | version "3.3.7" 397 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" 398 | 399 | imurmurhash@^0.1.4: 400 | version "0.1.4" 401 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 402 | 403 | inflight@^1.0.4: 404 | version "1.0.6" 405 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 406 | dependencies: 407 | once "^1.3.0" 408 | wrappy "1" 409 | 410 | inherits@2, inherits@^2.0.3, inherits@~2.0.3: 411 | version "2.0.3" 412 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 413 | 414 | inquirer@^3.0.6: 415 | version "3.3.0" 416 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" 417 | dependencies: 418 | ansi-escapes "^3.0.0" 419 | chalk "^2.0.0" 420 | cli-cursor "^2.1.0" 421 | cli-width "^2.0.0" 422 | external-editor "^2.0.4" 423 | figures "^2.0.0" 424 | lodash "^4.3.0" 425 | mute-stream "0.0.7" 426 | run-async "^2.2.0" 427 | rx-lite "^4.0.8" 428 | rx-lite-aggregates "^4.0.8" 429 | string-width "^2.1.0" 430 | strip-ansi "^4.0.0" 431 | through "^2.3.6" 432 | 433 | is-fullwidth-code-point@^2.0.0: 434 | version "2.0.0" 435 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 436 | 437 | is-path-cwd@^1.0.0: 438 | version "1.0.0" 439 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 440 | 441 | is-path-in-cwd@^1.0.0: 442 | version "1.0.0" 443 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 444 | dependencies: 445 | is-path-inside "^1.0.0" 446 | 447 | is-path-inside@^1.0.0: 448 | version "1.0.1" 449 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 450 | dependencies: 451 | path-is-inside "^1.0.1" 452 | 453 | is-promise@^2.1.0: 454 | version "2.1.0" 455 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 456 | 457 | is-resolvable@^1.0.0: 458 | version "1.0.1" 459 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" 460 | 461 | isarray@~1.0.0: 462 | version "1.0.0" 463 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 464 | 465 | isexe@^2.0.0: 466 | version "2.0.0" 467 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 468 | 469 | js-tokens@^3.0.2: 470 | version "3.0.2" 471 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 472 | 473 | js-yaml@^3.9.1: 474 | version "3.10.0" 475 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" 476 | dependencies: 477 | argparse "^1.0.7" 478 | esprima "^4.0.0" 479 | 480 | json-schema-traverse@^0.3.0: 481 | version "0.3.1" 482 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 483 | 484 | json-stable-stringify-without-jsonify@^1.0.1: 485 | version "1.0.1" 486 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 487 | 488 | levn@^0.3.0, levn@~0.3.0: 489 | version "0.3.0" 490 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 491 | dependencies: 492 | prelude-ls "~1.1.2" 493 | type-check "~0.3.2" 494 | 495 | lodash@^4.17.4, lodash@^4.3.0: 496 | version "4.17.19" 497 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 498 | 499 | lru-cache@^4.0.1: 500 | version "4.1.1" 501 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" 502 | dependencies: 503 | pseudomap "^1.0.2" 504 | yallist "^2.1.2" 505 | 506 | mimic-fn@^1.0.0: 507 | version "1.1.0" 508 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" 509 | 510 | minimatch@^3.0.2, minimatch@^3.0.4: 511 | version "3.0.4" 512 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 513 | dependencies: 514 | brace-expansion "^1.1.7" 515 | 516 | minimist@0.0.8: 517 | version "0.0.8" 518 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 519 | 520 | mkdirp@^0.5.1: 521 | version "0.5.1" 522 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 523 | dependencies: 524 | minimist "0.0.8" 525 | 526 | ms@2.0.0: 527 | version "2.0.0" 528 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 529 | 530 | mute-stream@0.0.7: 531 | version "0.0.7" 532 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 533 | 534 | natural-compare@^1.4.0: 535 | version "1.4.0" 536 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 537 | 538 | object-assign@^4.0.1: 539 | version "4.1.1" 540 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 541 | 542 | once@^1.3.0: 543 | version "1.4.0" 544 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 545 | dependencies: 546 | wrappy "1" 547 | 548 | onetime@^2.0.0: 549 | version "2.0.1" 550 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 551 | dependencies: 552 | mimic-fn "^1.0.0" 553 | 554 | optionator@^0.8.2: 555 | version "0.8.2" 556 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 557 | dependencies: 558 | deep-is "~0.1.3" 559 | fast-levenshtein "~2.0.4" 560 | levn "~0.3.0" 561 | prelude-ls "~1.1.2" 562 | type-check "~0.3.2" 563 | wordwrap "~1.0.0" 564 | 565 | os-tmpdir@~1.0.2: 566 | version "1.0.2" 567 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 568 | 569 | path-is-absolute@^1.0.0: 570 | version "1.0.1" 571 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 572 | 573 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: 574 | version "1.0.2" 575 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 576 | 577 | pify@^2.0.0: 578 | version "2.3.0" 579 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 580 | 581 | pinkie-promise@^2.0.0: 582 | version "2.0.1" 583 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 584 | dependencies: 585 | pinkie "^2.0.0" 586 | 587 | pinkie@^2.0.0: 588 | version "2.0.4" 589 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 590 | 591 | pluralize@^7.0.0: 592 | version "7.0.0" 593 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 594 | 595 | prelude-ls@~1.1.2: 596 | version "1.1.2" 597 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 598 | 599 | process-nextick-args@~1.0.6: 600 | version "1.0.7" 601 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 602 | 603 | progress@^2.0.0: 604 | version "2.0.0" 605 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 606 | 607 | pseudomap@^1.0.2: 608 | version "1.0.2" 609 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 610 | 611 | readable-stream@^2.0.5, readable-stream@^2.2.2: 612 | version "2.3.3" 613 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 614 | dependencies: 615 | core-util-is "~1.0.0" 616 | inherits "~2.0.3" 617 | isarray "~1.0.0" 618 | process-nextick-args "~1.0.6" 619 | safe-buffer "~5.1.1" 620 | string_decoder "~1.0.3" 621 | util-deprecate "~1.0.1" 622 | 623 | regexpp@^1.0.1: 624 | version "1.1.0" 625 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" 626 | 627 | require-uncached@^1.0.3: 628 | version "1.0.3" 629 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 630 | dependencies: 631 | caller-path "^0.1.0" 632 | resolve-from "^1.0.0" 633 | 634 | resolve-from@^1.0.0: 635 | version "1.0.1" 636 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 637 | 638 | restore-cursor@^2.0.0: 639 | version "2.0.0" 640 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 641 | dependencies: 642 | onetime "^2.0.0" 643 | signal-exit "^3.0.2" 644 | 645 | rimraf@^2.2.8: 646 | version "2.6.2" 647 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 648 | dependencies: 649 | glob "^7.0.5" 650 | 651 | run-async@^2.2.0: 652 | version "2.3.0" 653 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 654 | dependencies: 655 | is-promise "^2.1.0" 656 | 657 | rx-lite-aggregates@^4.0.8: 658 | version "4.0.8" 659 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" 660 | dependencies: 661 | rx-lite "*" 662 | 663 | rx-lite@*, rx-lite@^4.0.8: 664 | version "4.0.8" 665 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" 666 | 667 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 668 | version "5.1.1" 669 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 670 | 671 | semver@^5.3.0: 672 | version "5.5.0" 673 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 674 | 675 | shebang-command@^1.2.0: 676 | version "1.2.0" 677 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 678 | dependencies: 679 | shebang-regex "^1.0.0" 680 | 681 | shebang-regex@^1.0.0: 682 | version "1.0.0" 683 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 684 | 685 | signal-exit@^3.0.2: 686 | version "3.0.2" 687 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 688 | 689 | slice-ansi@1.0.0: 690 | version "1.0.0" 691 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 692 | dependencies: 693 | is-fullwidth-code-point "^2.0.0" 694 | 695 | snekfetch@^3.6.1: 696 | version "3.6.1" 697 | resolved "https://registry.yarnpkg.com/snekfetch/-/snekfetch-3.6.1.tgz#9b77fa946cfa15c7041940593a2689dc547427ea" 698 | 699 | sprintf-js@~1.0.2: 700 | version "1.0.3" 701 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 702 | 703 | string-width@^2.1.0, string-width@^2.1.1: 704 | version "2.1.1" 705 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 706 | dependencies: 707 | is-fullwidth-code-point "^2.0.0" 708 | strip-ansi "^4.0.0" 709 | 710 | string_decoder@~1.0.3: 711 | version "1.0.3" 712 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 713 | dependencies: 714 | safe-buffer "~5.1.0" 715 | 716 | strip-ansi@^3.0.0: 717 | version "3.0.1" 718 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 719 | dependencies: 720 | ansi-regex "^2.0.0" 721 | 722 | strip-ansi@^4.0.0: 723 | version "4.0.0" 724 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 725 | dependencies: 726 | ansi-regex "^3.0.0" 727 | 728 | strip-json-comments@~2.0.1: 729 | version "2.0.1" 730 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 731 | 732 | supports-color@^2.0.0: 733 | version "2.0.0" 734 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 735 | 736 | supports-color@^4.0.0: 737 | version "4.5.0" 738 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 739 | dependencies: 740 | has-flag "^2.0.0" 741 | 742 | table@4.0.2: 743 | version "4.0.2" 744 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" 745 | dependencies: 746 | ajv "^5.2.3" 747 | ajv-keywords "^2.1.0" 748 | chalk "^2.1.0" 749 | lodash "^4.17.4" 750 | slice-ansi "1.0.0" 751 | string-width "^2.1.1" 752 | 753 | text-table@~0.2.0: 754 | version "0.2.0" 755 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 756 | 757 | through@^2.3.6: 758 | version "2.3.8" 759 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 760 | 761 | tmp@^0.0.33: 762 | version "0.0.33" 763 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 764 | dependencies: 765 | os-tmpdir "~1.0.2" 766 | 767 | type-check@~0.3.2: 768 | version "0.3.2" 769 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 770 | dependencies: 771 | prelude-ls "~1.1.2" 772 | 773 | typedarray@^0.0.6: 774 | version "0.0.6" 775 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 776 | 777 | util-deprecate@~1.0.1: 778 | version "1.0.2" 779 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 780 | 781 | which@^1.2.9: 782 | version "1.3.0" 783 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 784 | dependencies: 785 | isexe "^2.0.0" 786 | 787 | wordwrap@~1.0.0: 788 | version "1.0.0" 789 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 790 | 791 | wrappy@1: 792 | version "1.0.2" 793 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 794 | 795 | write@^0.2.1: 796 | version "0.2.1" 797 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 798 | dependencies: 799 | mkdirp "^0.5.1" 800 | 801 | yallist@^2.1.2: 802 | version "2.1.2" 803 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 804 | --------------------------------------------------------------------------------