From e58136b18052e33ec8f3731c031eee003401542c Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 19:30:03 -0700 Subject: [PATCH 01/24] update node/npm and reinstall packages --- package-lock.json | 3259 +++++++++++++++++++++++++++++---------------- 1 file changed, 2097 insertions(+), 1162 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2ddb0287..1aaa5c4f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,45 @@ { "name": "@slack/client", - "version": "4.0.0-beta.1", + "version": "4.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@fimbul/bifrost": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.4.0.tgz", + "integrity": "sha512-s4YVtL0xXdEZCu9p6F+mhNTnR8N29jGrTNSMceYLunprbbQm5dHgEZ5rtJ7LZ3nELiis2ogwkMreRsm6aRrKsw==", + "dev": true, + "requires": { + "@fimbul/ymir": "0.4.0", + "get-caller-file": "1.0.2", + "tslib": "1.9.0" + } + }, + "@fimbul/ymir": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@fimbul/ymir/-/ymir-0.4.0.tgz", + "integrity": "sha512-qY+jYvoHqRmImS6TjQzsjun8ETPsDj1v+tdgR41edMWX5wsdant4qikabg3dASZ3Yr+kv3ja2Z7QoDGcj+5otQ==", + "dev": true, + "requires": { + "inversify": "4.11.1", + "reflect-metadata": "0.1.12", + "tslib": "1.9.0" + } + }, "@sindresorhus/is": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, "@types/chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz", @@ -30,7 +61,7 @@ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", "requires": { - "@types/node": "9.4.1" + "@types/node": "9.4.7" } }, "@types/got": { @@ -38,7 +69,7 @@ "resolved": "https://registry.npmjs.org/@types/got/-/got-7.1.7.tgz", "integrity": "sha512-quhlNPGIkaRyO4PnEuP9pEkUPktjfrvPESENGOhiEzgOUNbunETSQXY5bkZY+Bb/J9V5p/f50Rh1eDklD4Z2FQ==", "requires": { - "@types/node": "9.4.1" + "@types/node": "9.4.7" } }, "@types/is-stream": { @@ -46,7 +77,7 @@ "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", "requires": { - "@types/node": "9.4.1" + "@types/node": "9.4.7" } }, "@types/loglevel": { @@ -61,9 +92,9 @@ "dev": true }, "@types/node": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.1.tgz", - "integrity": "sha512-9ESUxmXt1Isc1xKfDBZ7tpULyTPY5ZCywcfvQTXoLUqP+n4D+MBH+0n75hdzrcmfCc3eWByOi27+GLmMuAvcUA==" + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", + "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==" }, "@types/p-cancelable": { "version": "0.3.0", @@ -111,7 +142,7 @@ "integrity": "sha512-J56Wn8j7ovzmlrkUSPXnVRH+YXUCGoVokiB49QIjz+yq0234guOrBvF/HHrqrJjnY4p5oq+q6xAxT/7An6SeWQ==", "requires": { "@types/events": "1.2.0", - "@types/node": "9.4.1" + "@types/node": "9.4.7" } }, "ajv": { @@ -157,16 +188,19 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } }, "any-observable": { "version": "0.2.0", @@ -181,9 +215,9 @@ "dev": true }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "1.0.3" @@ -275,6 +309,33 @@ "chalk": "1.1.3", "esutils": "2.0.2", "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "babylon": { @@ -324,9 +385,9 @@ } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -334,9 +395,9 @@ } }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "builtin-modules": { @@ -353,6 +414,32 @@ "requires": { "dicer": "0.2.5", "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "cache-point": { @@ -393,6 +480,12 @@ "integrity": "sha512-71q2IKUS1PAZ95t9lgMsLYoAtYuOrTol1jQLGkuI/8wOLtBvneFdpVqSvT0X4LxD6IDALhwNSEnRPVY/DNUyAg==", "dev": true }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "catharsis": { "version": "0.8.9", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", @@ -428,16 +521,14 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "2.2.1", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "supports-color": "5.3.0" } }, "check-error": { @@ -447,9 +538,9 @@ "dev": true }, "ci-info": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", - "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", "dev": true }, "cli-cursor": { @@ -527,88 +618,6 @@ "argv": "0.0.2", "request": "2.81.0", "urlgrey": "0.4.4" - }, - "dependencies": { - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - }, - "dependencies": { - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - } } }, "collect-all": { @@ -637,9 +646,9 @@ "dev": true }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } @@ -678,14 +687,14 @@ "requires": { "ansi-escape-sequences": "4.0.0", "array-back": "2.0.0", - "table-layout": "0.4.2", + "table-layout": "0.4.3", "typical": "2.6.1" } }, "commander": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.0.tgz", - "integrity": "sha512-okPpdvdJr6mUGi2XzupC+irQxzwGLVaBzacFC14hjLv8NColXEsxsU+QaeuSSXpQUak5g2K0vQ7WjA1e8svczg==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", + "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==", "dev": true }, "common-sequence": { @@ -729,7 +738,7 @@ "dev": true, "requires": { "is-directory": "0.3.1", - "js-yaml": "3.10.0", + "js-yaml": "3.11.0", "parse-json": "4.0.0", "require-from-string": "2.0.1" } @@ -740,7 +749,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -778,9 +787,9 @@ "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -863,12 +872,38 @@ "requires": { "readable-stream": "1.1.14", "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "dmd": { @@ -892,21 +927,12 @@ } }, "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "1.1.6", - "isarray": "0.0.1" - }, - "dependencies": { - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "dev": true - } + "esutils": "2.0.2" } }, "duplexer3": { @@ -986,9 +1012,9 @@ "dev": true }, "eventemitter3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.0.tgz", - "integrity": "sha512-62TxCtz4m2LRaOERVEvLJJ4A6rsg8lC9Xm+FLg2y/1fB/v4ZZ9JCOn+/Ppl5KkH6sRih6bhix724PVanmXYZJQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.1.tgz", + "integrity": "sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA==" }, "execa": { "version": "0.8.0", @@ -1076,22 +1102,13 @@ "dev": true }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.3.0" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "from2": { @@ -1100,36 +1117,7 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } + "readable-stream": "2.3.5" } }, "fs-extra": { @@ -1170,6 +1158,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", @@ -1219,9 +1213,9 @@ } }, "got": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/got/-/got-8.0.3.tgz", - "integrity": "sha512-U9GopEw0RLE8c3rbMmQ5/LtM2pLMopRxV7cVh6pNcX6ITLsH/iweqEn6GqoFxoGJHRbNZFvpFJ/knc+RITL6lg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", + "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", "requires": { "@sindresorhus/is": "0.7.0", "cacheable-request": "2.1.4", @@ -1233,13 +1227,20 @@ "isurl": "1.0.0", "lowercase-keys": "1.0.0", "mimic-response": "1.0.0", - "p-cancelable": "0.3.0", + "p-cancelable": "0.4.0", "p-timeout": "2.0.1", "pify": "3.0.0", "safe-buffer": "5.1.1", "timed-out": "4.0.1", "url-parse-lax": "3.0.0", "url-to-options": "1.0.1" + }, + "dependencies": { + "p-cancelable": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.0.tgz", + "integrity": "sha512-/AodqPe1y/GYbhSlnMjxukLGQfQIgsmjSy2CXCNB96kg4ozKvmlovuHEKICToOO/yS3LLWgrWI1dFtFfrePS1g==" + } } }, "graceful-fs": { @@ -1264,17 +1265,6 @@ "optimist": "0.6.1", "source-map": "0.4.4", "uglify-js": "2.8.29" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } } }, "har-schema": { @@ -1283,6 +1273,16 @@ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", "dev": true }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -1298,25 +1298,33 @@ "dev": true, "requires": { "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-to-string-tag-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { - "has-symbol-support-x": "1.4.1" + "has-symbol-support-x": "1.4.2" } }, "hawk": { @@ -1365,7 +1373,7 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "husky": { @@ -1418,6 +1426,12 @@ "p-is-promise": "1.1.0" } }, + "inversify": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-4.11.1.tgz", + "integrity": "sha512-9bs/36crPdTSOCcoomHMb96s+B8W0+2c9dHFP/Srv9ZQaPnUvsMgzmMHfgVECqfHVUIW+M5S7SYOjoig8khWuQ==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -1441,7 +1455,7 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.2" + "ci-info": "1.1.3" } }, "is-date-object": { @@ -1555,10 +1569,9 @@ "dev": true }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -1593,41 +1606,10 @@ "integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==", "dev": true, "requires": { - "chalk": "2.3.0", + "chalk": "2.3.2", "jest-get-type": "21.2.0", "leven": "2.1.0", "pretty-format": "21.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } } }, "js-tokens": { @@ -1637,12 +1619,12 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -1841,14 +1823,14 @@ "dev": true }, "lint-staged": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-6.1.0.tgz", - "integrity": "sha512-RMB6BUd2bEKaPnj06F7j8RRB8OHM+UP4fQS2LT8lF+X9BjSaezw1oVB5hc4elLhYvzlFCkhAaatzYz+x53YHgw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-6.1.1.tgz", + "integrity": "sha512-M/7bwLdXbeG7ZNLcasGeLMBDg60/w6obj3KOtINwJyxAxb53XGY0yH5FSZlWklEzuVbTtqtIfAajh6jYIN90AA==", "dev": true, "requires": { "app-root-path": "2.0.1", - "chalk": "2.3.0", - "commander": "2.14.0", + "chalk": "2.3.2", + "commander": "2.15.0", "cosmiconfig": "4.0.0", "debug": "3.1.0", "dedent": "0.7.0", @@ -1864,48 +1846,8 @@ "p-map": "1.2.0", "path-is-inside": "1.0.2", "pify": "3.0.0", - "staged-git-files": "0.0.4", + "staged-git-files": "1.0.0", "stringify-object": "3.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } } }, "listr": { @@ -1928,22 +1870,47 @@ "log-update": "1.0.2", "ora": "0.2.3", "p-map": "1.2.0", - "rxjs": "5.5.6", + "rxjs": "5.5.7", "stream-to-observable": "0.2.0", "strip-ansi": "3.0.1" }, "dependencies": { - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - } - } - }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "listr-silent-renderer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", @@ -1966,6 +1933,25 @@ "strip-ansi": "3.0.1" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", @@ -1980,6 +1966,12 @@ "requires": { "chalk": "1.1.3" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -1993,6 +1985,33 @@ "cli-cursor": "1.0.2", "date-fns": "1.29.0", "figures": "1.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "lodash": { @@ -2037,38 +2056,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "chalk": "2.3.2" } }, "log-update": { @@ -2104,9 +2092,9 @@ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -2114,9 +2102,9 @@ } }, "make-error": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.3.tgz", - "integrity": "sha512-j3dZCri3cCd23wgPqK/0/KvTN8R+W6fXDqQe8BNLbTpONjbA8SPaRr+q0BQq9bx3Q/+g68/gDIh9FW3by702Tg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", "dev": true }, "marked": { @@ -2126,16 +2114,16 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-response": { @@ -2149,13 +2137,13 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, "mkdirp": { @@ -2165,6 +2153,14 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "mkdirp2": { @@ -2174,15 +2170,15 @@ "dev": true }, "mocha": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", - "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.4.tgz", + "integrity": "sha512-nMOpAPFosU1B4Ix1jdhx5e3q7XO55ic5a8cgYvW27CequcEY+BabS0kUVL1Cw1V5PuVHZWeNRWFLmEPexo79VA==", "dev": true, "requires": { - "browser-stdout": "1.3.0", + "browser-stdout": "1.3.1", "commander": "2.11.0", "debug": "3.1.0", - "diff": "3.3.1", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", "growl": "1.10.3", @@ -2197,14 +2193,11 @@ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true }, "supports-color": { "version": "4.4.0", @@ -2224,88 +2217,40 @@ "dev": true }, "nise": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.2.tgz", - "integrity": "sha512-rvxf+PSZeCKtP0DgmwMmNf1G3I6X1r4WHiP2H88PlIkOkt7mGqufdokjS8caoHBgZzVx0ee/5ytGcGHbZaUw8w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.0.tgz", + "integrity": "sha512-U+Krdzhsw4losPP/Rij5UGTLQgS9gaWmXdRIbZQIQWVsUGDBo+N0m9mrY9CCEnmwssgswwydxLJUZtFfouC0gA==", "dev": true, "requires": { - "formatio": "1.2.0", + "@sinonjs/formatio": "2.0.0", "just-extend": "1.1.27", - "lolex": "1.6.0", + "lolex": "2.3.2", "path-to-regexp": "1.7.0", "text-encoding": "0.6.4" - }, - "dependencies": { - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - } } }, "nock": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.6.tgz", - "integrity": "sha512-DuKF+1W/FnMO6MXIGgCIWcM95bETjBbmFdR4v7dAj1zH9a9XhOjAa//PuWh98XIXxcZt7wdiv0JlO0AA0e2kqQ==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/nock/-/nock-9.2.3.tgz", + "integrity": "sha512-4XYNSJDJ/PvNoH+cCRWcGOOFsq3jtZdNTRIlPIBA7CopGWJO56m5OaPEjjJ3WddxNYfe5HL9sQQAtMt8oyR9AA==", "dev": true, "requires": { - "chai": "3.5.0", - "debug": "2.6.9", + "chai": "4.1.2", + "debug": "3.1.0", "deep-equal": "1.0.1", "json-stringify-safe": "5.0.1", "lodash": "4.17.5", "mkdirp": "0.5.1", - "propagate": "0.4.0", + "propagate": "1.0.0", "qs": "6.5.1", "semver": "5.5.0" }, "dependencies": { - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true, - "requires": { - "assertion-error": "1.1.0", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, "qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true } } }, @@ -2349,7 +2294,7 @@ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "dev": true, "requires": { - "commander": "2.14.0", + "commander": "2.15.0", "npm-path": "2.0.4", "which": "1.3.0" } @@ -2361,9 +2306,9 @@ "dev": true }, "nyc": { - "version": "11.4.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz", - "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.6.0.tgz", + "integrity": "sha512-ZaXCh0wmbk2aSBH2B5hZGGvK2s9aM8DIm2rVY+BG3Fx8tUS+bpJSswUVZqOD1YfCmnYRFSqgYJSr7UeeUcW0jg==", "dev": true, "requires": { "archy": "1.0.0", @@ -2376,29 +2321,28 @@ "find-up": "2.1.0", "foreground-child": "1.5.6", "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-coverage": "1.2.0", "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.3", + "istanbul-lib-source-maps": "1.2.3", + "istanbul-reports": "1.3.0", "md5-hex": "1.3.0", - "merge-source-map": "1.0.4", + "merge-source-map": "1.1.0", "micromatch": "2.3.11", "mkdirp": "0.5.1", "resolve-from": "2.0.0", "rimraf": "2.6.2", "signal-exit": "3.0.2", "spawn-wrap": "1.4.2", - "test-exclude": "4.1.1", - "yargs": "10.0.3", - "yargs-parser": "8.0.0" + "test-exclude": "4.2.1", + "yargs": "11.1.0", + "yargs-parser": "8.1.0" }, "dependencies": { "align-text": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2", @@ -2408,26 +2352,22 @@ }, "amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "bundled": true, "dev": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "bundled": true, "dev": true }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "bundled": true, "dev": true }, "append-transform": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "bundled": true, "dev": true, "requires": { "default-require-extensions": "1.0.0" @@ -2435,14 +2375,12 @@ }, "archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "bundled": true, "dev": true }, "arr-diff": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "bundled": true, "dev": true, "requires": { "arr-flatten": "1.1.0" @@ -2450,32 +2388,42 @@ }, "arr-flatten": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "bundled": true, + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "bundled": true, "dev": true }, "array-unique": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "bundled": true, + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "bundled": true, "dev": true }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "bundled": true, + "dev": true + }, + "atob": { + "version": "2.0.3", + "bundled": true, "dev": true }, "babel-code-frame": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "bundled": true, "dev": true, "requires": { "chalk": "1.1.3", @@ -2484,9 +2432,8 @@ } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "bundled": true, "dev": true, "requires": { "babel-messages": "6.23.0", @@ -2494,15 +2441,14 @@ "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "source-map": "0.5.7", "trim-right": "1.0.1" } }, "babel-messages": { "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0" @@ -2510,8 +2456,7 @@ }, "babel-runtime": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "bundled": true, "dev": true, "requires": { "core-js": "2.5.3", @@ -2520,21 +2465,19 @@ }, "babel-template": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-traverse": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "bundled": true, "dev": true, "requires": { "babel-code-frame": "6.26.0", @@ -2544,38 +2487,63 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "invariant": "2.2.3", + "lodash": "4.17.5" } }, "babel-types": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "bundled": true, "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "to-fast-properties": "1.0.3" } }, "babylon": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bundled": true, "dev": true }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "bundled": true, "dev": true }, + "base": { + "version": "0.11.2", + "bundled": true, + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "bundled": true, "dev": true, "requires": { "balanced-match": "1.0.0", @@ -2584,8 +2552,7 @@ }, "braces": { "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "bundled": true, "dev": true, "requires": { "expand-range": "1.8.2", @@ -2595,14 +2562,35 @@ }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "bundled": true, "dev": true }, + "cache-base": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "caching-transform": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", - "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", + "bundled": true, "dev": true, "requires": { "md5-hex": "1.3.0", @@ -2612,15 +2600,13 @@ }, "camelcase": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "bundled": true, "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -2630,8 +2616,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "bundled": true, "dev": true, "requires": { "ansi-styles": "2.2.1", @@ -2641,10 +2626,86 @@ "supports-color": "2.0.0" } }, + "class-utils": { + "version": "0.3.6", + "bundled": true, + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, "cliui": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -2655,8 +2716,7 @@ "dependencies": { "wordwrap": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "bundled": true, "dev": true, "optional": true } @@ -2664,48 +2724,60 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "bundled": true, "dev": true }, + "collection-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "bundled": true, + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "bundled": true, "dev": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "bundled": true, "dev": true }, "convert-source-map": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "bundled": true, + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "bundled": true, "dev": true }, "core-js": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "bundled": true, "dev": true }, "cross-spawn": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "which": "1.3.0" } }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "bundled": true, "dev": true, "requires": { "ms": "2.0.0" @@ -2713,29 +2785,46 @@ }, "debug-log": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "bundled": true, "dev": true }, "decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "bundled": true, + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true, "dev": true }, "default-require-extensions": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "bundled": true, "dev": true, "requires": { "strip-bom": "2.0.0" } }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "define-property": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "detect-indent": { + "version": "4.0.0", + "bundled": true, "dev": true, "requires": { "repeating": "2.0.1" @@ -2743,8 +2832,7 @@ }, "error-ex": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "bundled": true, "dev": true, "requires": { "is-arrayish": "0.2.1" @@ -2752,20 +2840,17 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "bundled": true, "dev": true }, "esutils": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "bundled": true, "dev": true }, "execa": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "bundled": true, "dev": true, "requires": { "cross-spawn": "5.1.0", @@ -2779,11 +2864,10 @@ "dependencies": { "cross-spawn": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -2792,8 +2876,7 @@ }, "expand-brackets": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "bundled": true, "dev": true, "requires": { "is-posix-bracket": "0.1.1" @@ -2801,17 +2884,34 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "bundled": true, "dev": true, "requires": { "fill-range": "2.2.3" } }, + "extend-shallow": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "extglob": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -2819,14 +2919,12 @@ }, "filename-regex": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "bundled": true, "dev": true }, "fill-range": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "bundled": true, "dev": true, "requires": { "is-number": "2.1.0", @@ -2838,8 +2936,7 @@ }, "find-cache-dir": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "bundled": true, "dev": true, "requires": { "commondir": "1.0.1", @@ -2849,8 +2946,7 @@ }, "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "bundled": true, "dev": true, "requires": { "locate-path": "2.0.0" @@ -2858,14 +2954,12 @@ }, "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "bundled": true, "dev": true }, "for-own": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "bundled": true, "dev": true, "requires": { "for-in": "1.0.2" @@ -2873,36 +2967,44 @@ }, "foreground-child": { "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "bundled": true, "dev": true, "requires": { "cross-spawn": "4.0.2", "signal-exit": "3.0.2" } }, + "fragment-cache": { + "version": "0.2.1", + "bundled": true, + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "bundled": true, "dev": true }, "get-caller-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "bundled": true, "dev": true }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "bundled": true, + "dev": true + }, + "get-value": { + "version": "2.0.6", + "bundled": true, "dev": true }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "bundled": true, "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -2915,8 +3017,7 @@ }, "glob-base": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "bundled": true, "dev": true, "requires": { "glob-parent": "2.0.0", @@ -2925,8 +3026,7 @@ }, "glob-parent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "bundled": true, "dev": true, "requires": { "is-glob": "2.0.1" @@ -2934,20 +3034,17 @@ }, "globals": { "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "bundled": true, "dev": true }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "bundled": true, "dev": true }, "handlebars": { "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "bundled": true, "dev": true, "requires": { "async": "1.5.2", @@ -2958,8 +3055,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "bundled": true, "dev": true, "requires": { "amdefine": "1.0.1" @@ -2969,8 +3065,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -2978,26 +3073,76 @@ }, "has-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "bundled": true, "dev": true }, + "has-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "bundled": true, "dev": true }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "bundled": true, "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "dev": true, "requires": { "once": "1.4.0", @@ -3006,14 +3151,12 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "bundled": true, "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.3", + "bundled": true, "dev": true, "requires": { "loose-envify": "1.3.1" @@ -3021,41 +3164,82 @@ }, "invert-kv": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "bundled": true, "dev": true }, + "is-accessor-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "bundled": true, "dev": true }, "is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "bundled": true, "dev": true }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "bundled": true, "dev": true, "requires": { "builtin-modules": "1.1.1" } }, + "is-data-descriptor": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, "is-dotfile": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "bundled": true, "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "bundled": true, "dev": true, "requires": { "is-primitive": "2.0.0" @@ -3063,38 +3247,30 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "bundled": true, "dev": true }, "is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "bundled": true, "dev": true }, "is-finite": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "bundled": true, "dev": true, "requires": { "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "bundled": true, + "dev": true }, "is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "bundled": true, "dev": true, "requires": { "is-extglob": "1.0.0" @@ -3102,95 +3278,118 @@ }, "is-number": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2" } }, + "is-odd": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "is-posix-bracket": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "bundled": true, "dev": true }, "is-primitive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "bundled": true, "dev": true }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "bundled": true, "dev": true }, "is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "bundled": true, + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "bundled": true, "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "bundled": true, "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "bundled": true, "dev": true }, "isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "bundled": true, "dev": true, "requires": { "isarray": "1.0.0" } }, "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "version": "1.2.0", + "bundled": true, "dev": true }, "istanbul-lib-hook": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "bundled": true, "dev": true, "requires": { "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", - "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "version": "1.10.1", + "bundled": true, "dev": true, "requires": { - "babel-generator": "6.26.0", + "babel-generator": "6.26.1", "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" } }, "istanbul-lib-report": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", - "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", + "version": "1.1.3", + "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "path-parse": "1.0.5", "supports-color": "3.2.3" @@ -3198,8 +3397,7 @@ "dependencies": { "supports-color": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "bundled": true, "dev": true, "requires": { "has-flag": "1.0.0" @@ -3208,13 +3406,12 @@ } }, "istanbul-lib-source-maps": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", - "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", + "version": "1.2.3", + "bundled": true, "dev": true, "requires": { "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", "rimraf": "2.6.2", "source-map": "0.5.7" @@ -3222,8 +3419,7 @@ "dependencies": { "debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "bundled": true, "dev": true, "requires": { "ms": "2.0.0" @@ -3232,9 +3428,8 @@ } }, "istanbul-reports": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", - "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", + "version": "1.3.0", + "bundled": true, "dev": true, "requires": { "handlebars": "4.0.11" @@ -3242,20 +3437,17 @@ }, "js-tokens": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "bundled": true, "dev": true }, "jsesc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "bundled": true, "dev": true }, "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -3263,15 +3455,13 @@ }, "lazy-cache": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "bundled": true, "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "bundled": true, "dev": true, "requires": { "invert-kv": "1.0.0" @@ -3279,8 +3469,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -3292,8 +3481,7 @@ }, "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "bundled": true, "dev": true, "requires": { "p-locate": "2.0.0", @@ -3302,47 +3490,54 @@ "dependencies": { "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "bundled": true, "dev": true } } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.5", + "bundled": true, "dev": true }, "longest": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "bundled": true, "dev": true }, "loose-envify": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "bundled": true, "dev": true, "requires": { "js-tokens": "3.0.2" } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "bundled": true, "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" } }, + "map-cache": { + "version": "0.2.2", + "bundled": true, + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, "md5-hex": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", - "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", + "bundled": true, "dev": true, "requires": { "md5-o-matic": "0.1.1" @@ -3350,32 +3545,35 @@ }, "md5-o-matic": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", - "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", + "bundled": true, "dev": true }, "mem": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "bundled": true, "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "version": "1.1.0", + "bundled": true, "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } } }, "micromatch": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "bundled": true, "dev": true, "requires": { "arr-diff": "2.0.0", @@ -3394,30 +3592,45 @@ } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "bundled": true, "dev": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "bundled": true, "dev": true }, + "mixin-deep": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8" @@ -3425,26 +3638,59 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "bundled": true, "dev": true }, + "nanomatch": { + "version": "1.2.9", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } + }, "normalize-package-data": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "bundled": true, "dev": true, "requires": { "remove-trailing-separator": "1.1.0" @@ -3452,8 +3698,7 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "bundled": true, "dev": true, "requires": { "path-key": "2.0.1" @@ -3461,30 +3706,109 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "bundled": true, "dev": true }, + "object-copy": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "object.omit": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "bundled": true, "dev": true, "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" } }, + "object.pick": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "dev": true, "requires": { "wrappy": "1.0.2" @@ -3492,8 +3816,7 @@ }, "optimist": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "bundled": true, "dev": true, "requires": { "minimist": "0.0.8", @@ -3502,14 +3825,12 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "bundled": true, "dev": true }, "os-locale": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "bundled": true, "dev": true, "requires": { "execa": "0.7.0", @@ -3519,29 +3840,33 @@ }, "p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "bundled": true, "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "1.0.0" + } }, "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "bundled": true, "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "1.2.0" } }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, "parse-glob": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "bundled": true, "dev": true, "requires": { "glob-base": "0.3.0", @@ -3552,17 +3877,20 @@ }, "parse-json": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "bundled": true, "dev": true, "requires": { "error-ex": "1.3.1" } }, + "pascalcase": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, "path-exists": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "bundled": true, "dev": true, "requires": { "pinkie-promise": "2.0.1" @@ -3570,26 +3898,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "bundled": true, "dev": true }, "path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "bundled": true, "dev": true }, "path-parse": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "bundled": true, "dev": true }, "path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -3599,20 +3923,17 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "bundled": true, "dev": true }, "pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "bundled": true, "dev": true }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "bundled": true, "dev": true, "requires": { "pinkie": "2.0.4" @@ -3620,8 +3941,7 @@ }, "pkg-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2" @@ -3629,8 +3949,7 @@ "dependencies": { "find-up": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "bundled": true, "dev": true, "requires": { "path-exists": "2.1.0", @@ -3639,22 +3958,24 @@ } } }, + "posix-character-classes": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, "preserve": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "bundled": true, "dev": true }, "pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "bundled": true, "dev": true }, "randomatic": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "bundled": true, "dev": true, "requires": { "is-number": "3.0.0", @@ -3663,8 +3984,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "bundled": true, "dev": true, "requires": { "kind-of": "3.2.2" @@ -3672,8 +3992,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -3683,8 +4002,7 @@ }, "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "bundled": true, "dev": true, "requires": { "is-buffer": "1.1.6" @@ -3694,8 +4012,7 @@ }, "read-pkg": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "bundled": true, "dev": true, "requires": { "load-json-file": "1.1.0", @@ -3705,8 +4022,7 @@ }, "read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "bundled": true, "dev": true, "requires": { "find-up": "1.1.2", @@ -3715,8 +4031,7 @@ "dependencies": { "find-up": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "bundled": true, "dev": true, "requires": { "path-exists": "2.1.0", @@ -3727,41 +4042,44 @@ }, "regenerator-runtime": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "bundled": true, "dev": true }, "regex-cache": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "bundled": true, "dev": true, "requires": { "is-equal-shallow": "0.1.3" } }, + "regex-not": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "bundled": true, "dev": true }, "repeat-element": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "bundled": true, "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "bundled": true, "dev": true }, "repeating": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "bundled": true, "dev": true, "requires": { "is-finite": "1.0.2" @@ -3769,26 +4087,32 @@ }, "require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "bundled": true, "dev": true }, "require-main-filename": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "bundled": true, "dev": true }, "resolve-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "bundled": true, + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "ret": { + "version": "0.1.15", + "bundled": true, "dev": true }, "right-align": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -3797,29 +4121,54 @@ }, "rimraf": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "bundled": true, "dev": true, "requires": { "glob": "7.1.2" } }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true + "safe-regex": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "bundled": true, "dev": true }, + "set-value": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, "shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "bundled": true, "dev": true, "requires": { "shebang-regex": "1.0.0" @@ -3827,32 +4176,161 @@ }, "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "bundled": true, "dev": true }, "slide": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "bundled": true, "dev": true }, + "snapdragon": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "bundled": true, + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "bundled": true, "dev": true }, "spawn-wrap": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", - "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "bundled": true, "dev": true, "requires": { "foreground-child": "1.5.6", @@ -3864,30 +4342,114 @@ } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "bundled": true, "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true, "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "bundled": true, "dev": true }, + "split-string": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "static-extend": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "2.0.0", @@ -3896,20 +4458,12 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "3.0.0" @@ -3919,8 +4473,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -3928,8 +4481,7 @@ }, "strip-bom": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "bundled": true, "dev": true, "requires": { "is-utf8": "0.2.1" @@ -3937,45 +4489,311 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "bundled": true, "dev": true }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "bundled": true, "dev": true }, "test-exclude": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", - "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", + "version": "4.2.1", + "bundled": true, "dev": true, "requires": { "arrify": "1.0.1", - "micromatch": "2.3.11", + "micromatch": "3.1.9", "object-assign": "4.1.1", "read-pkg-up": "1.0.1", "require-main-filename": "1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "braces": { + "version": "2.3.1", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "bundled": true, + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + } } }, "to-fast-properties": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "bundled": true, "dev": true }, + "to-object-path": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, "trim-right": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "bundled": true, "dev": true }, "uglify-js": { "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -3986,8 +4804,7 @@ "dependencies": { "yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "bundled": true, "dev": true, "optional": true, "requires": { @@ -3999,27 +4816,117 @@ } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "union-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "bundled": true, + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "3.0.1", + "bundled": true, + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "bundled": true, + "dev": true + }, + "use": { + "version": "3.1.0", + "bundled": true, "dev": true, - "optional": true + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "bundled": true, + "dev": true + } + } }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "bundled": true, "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "which": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "bundled": true, "dev": true, "requires": { "isexe": "2.0.0" @@ -4027,37 +4934,40 @@ }, "which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "bundled": true, "dev": true }, "window-size": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "bundled": true, "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "bundled": true, "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "bundled": true, "dev": true, "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bundled": true, "dev": true, "requires": { "code-point-at": "1.1.0", @@ -4069,14 +4979,12 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "bundled": true, "dev": true }, "write-file-atomic": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "bundled": true, "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -4086,23 +4994,20 @@ }, "y18n": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "bundled": true, "dev": true }, "yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "bundled": true, "dev": true }, "yargs": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", - "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "version": "11.1.0", + "bundled": true, "dev": true, "requires": { - "cliui": "3.2.0", + "cliui": "4.0.0", "decamelize": "1.2.0", "find-up": "2.1.0", "get-caller-file": "1.0.2", @@ -4113,39 +5018,50 @@ "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "8.0.0" + "yargs-parser": "9.0.2" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "4.1.0" } } } }, "yargs-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz", - "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=", + "version": "8.1.0", + "bundled": true, "dev": true, "requires": { "camelcase": "4.1.0" @@ -4153,8 +5069,7 @@ "dependencies": { "camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "bundled": true, "dev": true } } @@ -4241,7 +5156,7 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", + "minimist": "0.0.10", "wordwrap": "0.0.3" } }, @@ -4255,6 +5170,33 @@ "cli-cursor": "1.0.2", "cli-spinners": "0.1.2", "object-assign": "4.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "p-cancelable": { @@ -4284,9 +5226,9 @@ "dev": true }, "p-queue": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.3.0.tgz", - "integrity": "sha1-ZdVecbwVAPxBMSLamK5Ff/inwDg=" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.3.1.tgz", + "integrity": "sha512-MJGD2eVNHhtCsGLBDsfNzhBDlWxBFb5BvVXhJFbmlXH76Llo792ylwqEYJguLo+BnxZpos/Qw9dq0voyQRD3pg==" }, "p-retry": { "version": "1.0.0", @@ -4351,6 +5293,14 @@ "dev": true, "requires": { "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } } }, "pathval": { @@ -4387,35 +5337,18 @@ "dev": true, "requires": { "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - } + "ansi-styles": "3.2.1" } }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "propagate": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz", - "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", + "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", "dev": true }, "pseudomap": { @@ -4430,6 +5363,12 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, "query-string": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz", @@ -4441,15 +5380,17 @@ } }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" } }, "rechoir": { @@ -4533,6 +5474,12 @@ } } }, + "reflect-metadata": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "dev": true + }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -4548,6 +5495,49 @@ "is-finite": "1.0.2" } }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + } + } + }, "require-from-string": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", @@ -4614,9 +5604,9 @@ } }, "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.7.tgz", + "integrity": "sha512-Hxo2ac8gRQjwjtKgukMIwBRbq5+KAeEV5hXM4obYBOAghev41bDQWgFH4svYiU9UnQ5kNww2LgfyBdevCd2HXA==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -4641,6 +5631,12 @@ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", "dev": true }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -4693,29 +5689,18 @@ "dev": true }, "sinon": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.2.2.tgz", - "integrity": "sha512-BEa593xl+IkIc94nKo0O0LauQC/gQy8Gyv4DkzPwF/9DweC5phr1y+42zibCpn9abfkdHxt9r8AhD0R6u9DE/Q==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.4.5.tgz", + "integrity": "sha512-vsg06IyB4gM5ry1qq13cQQk2U5ZqbL40ygDRNklYx2kokZktakyfinPDJP00WY0WjizRg2p0yhKLuTsCRpwCUA==", "dev": true, "requires": { - "diff": "3.3.1", - "formatio": "1.2.0", + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", "lodash.get": "4.4.2", "lolex": "2.3.2", - "nise": "1.2.2", - "supports-color": "5.1.0", + "nise": "1.3.0", + "supports-color": "5.3.0", "type-detect": "4.0.8" - }, - "dependencies": { - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } } }, "slice-ansi": { @@ -4764,10 +5749,13 @@ } }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } }, "source-map-support": { "version": "0.5.3", @@ -4776,6 +5764,14 @@ "dev": true, "requires": { "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "sprintf-js": { @@ -4785,9 +5781,9 @@ "dev": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { "asn1": "0.2.3", @@ -4809,9 +5805,9 @@ } }, "staged-git-files": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", - "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.0.0.tgz", + "integrity": "sha1-zbhHg3wfzFLAioctSIPMCHdmioA=", "dev": true }, "stream-connect": { @@ -4872,10 +5868,12 @@ } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } }, "stringify-object": { "version": "3.2.2", @@ -4901,6 +5899,14 @@ "dev": true, "requires": { "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "strip-bom": { @@ -4928,10 +5934,13 @@ "dev": true }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } }, "symbol-observable": { "version": "0.2.4", @@ -4940,9 +5949,9 @@ "dev": true }, "table-layout": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz", - "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz", + "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==", "dev": true, "requires": { "array-back": "2.0.0", @@ -4986,9 +5995,9 @@ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { "punycode": "1.4.1" @@ -5005,52 +6014,6 @@ "doctrine": "2.1.0", "fs-extra-p": "4.5.2", "source-map-support": "0.5.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } } }, "ts-node": { @@ -5060,51 +6023,22 @@ "dev": true, "requires": { "arrify": "1.0.1", - "chalk": "2.3.0", - "diff": "3.3.1", - "make-error": "1.3.3", + "chalk": "2.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", "minimist": "1.2.0", "mkdirp": "0.5.1", "source-map-support": "0.5.3", "tsconfig": "7.0.0", - "v8flags": "3.0.1", + "v8flags": "3.0.2", "yn": "2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -5134,74 +6068,38 @@ "requires": { "babel-code-frame": "6.26.0", "builtin-modules": "1.1.1", - "chalk": "2.3.0", - "commander": "2.14.0", - "diff": "3.3.1", + "chalk": "2.3.2", + "commander": "2.15.0", + "diff": "3.5.0", "glob": "7.1.2", - "js-yaml": "3.10.0", + "js-yaml": "3.11.0", "minimatch": "3.0.4", "resolve": "1.5.0", "semver": "5.5.0", "tslib": "1.9.0", - "tsutils": "2.21.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "tsutils": "2.22.2" } }, "tslint-config-airbnb": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.5.0.tgz", - "integrity": "sha1-aGsZVgZF7rRKZmLclKY86TU9WJ4=", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.7.0.tgz", + "integrity": "sha1-Cf8EsN1Zl2X0S0QlAERY0I/LLEA=", "dev": true, "requires": { - "tslint-consistent-codestyle": "1.11.1", + "tslint-consistent-codestyle": "1.12.0", "tslint-eslint-rules": "4.1.1", - "tslint-microsoft-contrib": "5.0.2" + "tslint-microsoft-contrib": "5.0.3" } }, "tslint-consistent-codestyle": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.11.1.tgz", - "integrity": "sha512-wLu+Ct8x4mBmVkuhEiNAnUBkxchMV2Le0ikBsST5HnKbGlm3K4RSpXCBSI1VtJDk748W2I5hDzgsInawLdnxwQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.12.0.tgz", + "integrity": "sha512-/nubJhAjGx+QiZkuiMUWEHqNmrCtuc4Hw29fel/hFDMeNBkTBPuiBpi0wUtHJ26aKPUX44PCp8iduc/p3QxESw==", "dev": true, "requires": { + "@fimbul/bifrost": "0.4.0", "tslib": "1.9.0", - "tsutils": "2.21.0" + "tsutils": "2.22.2" } }, "tslint-eslint-rules": { @@ -5215,6 +6113,28 @@ "tsutils": "1.9.1" }, "dependencies": { + "doctrine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", + "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "dev": true, + "requires": { + "esutils": "1.1.6", + "isarray": "0.0.1" + } + }, + "esutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", + "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, "tsutils": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", @@ -5224,23 +6144,32 @@ } }, "tslint-microsoft-contrib": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.0.2.tgz", - "integrity": "sha1-7MKnl/d3oS8AZpRM7AyBqefFnuk=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.0.3.tgz", + "integrity": "sha512-5AnfTGlfpUzpRHLmoojPBKFTTmbjnwgdaTHMdllausa4GBPya5u36i9ddrTX4PhetGZvd4JUYIpAmgHqVnsctg==", "dev": true, "requires": { - "tsutils": "2.21.0" + "tsutils": "2.22.2" } }, "tsutils": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.21.0.tgz", - "integrity": "sha512-zlOHTYtTwvTiKxUyAU8wiKzPpAgwZrGjb7AY18VUlxuCgBiTMVorIl5HjrCT8V64Hm34RI1BZITJMVQpBLMxVg==", + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz", + "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", "dev": true, "requires": { "tslib": "1.9.0" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -5255,9 +6184,9 @@ "dev": true }, "typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.1.tgz", - "integrity": "sha512-bqB1yS6o9TNA9ZC/MJxM0FZzPnZdtHj0xWK/IZ5khzVqdpGul/R/EIiHRgFXlwTD7PSIaYVnGKq1QgMCu2mnqw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", "dev": true }, "typical": { @@ -5352,10 +6281,16 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, "v8flags": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz", + "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==", "dev": true, "requires": { "homedir-polyfill": "1.0.1" From 5feaa6b900542daf6bb7b19f169c03e5f30e2a29 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 19:31:08 -0700 Subject: [PATCH 02/24] add unit tests for WebClient without a token --- src/WebClient.spec.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index fc2e56860..7f42efba8 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -23,6 +23,11 @@ describe('WebClient', function () { assert.equal(client.token, token); assert.equal(client.slackApiUrl, 'https://slack.com/api/') }); + + it('should build a client without a token', function () { + const client = new WebClient(); + assert.instanceOf(client, WebClient); + }); }); describe('has an option to change the log output severity', function () { @@ -311,6 +316,21 @@ describe('WebClient', function () { }); }); + describe('apiCall() - without a token', function () { + const client = new WebClient(undefined, { retryConfig: fastRetriesForTest }); + + const scope = nock('https://slack.com') + // NOTE: this could create false negatives if the serialization order changes (it shouldn't matter) + .post(/api/, 'foo=stringval') + .reply(200, { ok: true }); + + const r = client.apiCall('method', { foo: 'stringval' }); + assert(isPromise(r)); + return r.then(result => { + scope.done(); + }); + }); + describe('named method aliases (facets)', function () { beforeEach(function () { this.client = new WebClient(token, { retryConfig: fastRetriesForTest }); From e6580bb59164264664f740869a3eb17534764a3e Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 20:45:14 -0700 Subject: [PATCH 03/24] adds typings-tester, and failing test for WebClient without token --- package-lock.json | 9 +++++++++ package.json | 6 ++++-- test/typescript/sources/webclient-no-token.ts | 11 +++++++++++ test/typescript/test.ts | 9 +++++++++ test/typescript/tsconfig-strict.json | 13 +++++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 test/typescript/sources/webclient-no-token.ts create mode 100644 test/typescript/test.ts create mode 100644 test/typescript/tsconfig-strict.json diff --git a/package-lock.json b/package-lock.json index 1aaa5c4f7..ee4c94e0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6195,6 +6195,15 @@ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", "dev": true }, + "typings-tester": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/typings-tester/-/typings-tester-0.3.1.tgz", + "integrity": "sha512-KvsNMCKtPK87zn6xAVM+EAYBKt8UqfaajdtZv6GylHtmdfhjC4vRXXqfxO46lFeOgm7dfc8carJDjdd0wunNBw==", + "dev": true, + "requires": { + "commander": "2.15.0" + } + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", diff --git a/package.json b/package.json index 4dde80cdc..5f922f70b 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,9 @@ "precommit": "lint-staged", "prepush": "npm run build", "lint": "tslint --project .", - "test": "npm run test:spec", + "test": "npm run test:spec && npm run test:integration", "test:spec": "nyc mocha --opts src/mocha.opts src/*.spec.js src/**/*.spec.js", + "test:integration": "nyc mocha --opts test/mocha.opts test/typescript/test.ts", "coverage": "codecov", "build": "npm run build:clean && tsc", "build:clean": "shx rm -rf ./dist ./coverage ./.nyc_output", @@ -90,6 +91,7 @@ "ts-node": "^4.1.0", "tslint": "^5.9.1", "tslint-config-airbnb": "^5.5.0", - "typescript": "^2.7.1" + "typescript": "^2.7.1", + "typings-tester": "^0.3.1" } } diff --git a/test/typescript/sources/webclient-no-token.ts b/test/typescript/sources/webclient-no-token.ts new file mode 100644 index 000000000..0ec273911 --- /dev/null +++ b/test/typescript/sources/webclient-no-token.ts @@ -0,0 +1,11 @@ + +import { WebClient } from '../../../dist'; + +const web = new WebClient(); + +web.oauth.access({ + client_id: 'CLIENT_ID', + client_secret: 'CLIENT_SECRET', + code: 'CODE', + redirect_uri: 'REDIRECT_URI', +}); diff --git a/test/typescript/test.ts b/test/typescript/test.ts new file mode 100644 index 000000000..8f2baf4c2 --- /dev/null +++ b/test/typescript/test.ts @@ -0,0 +1,9 @@ +import 'mocha'; +import { check, checkDirectory } from 'typings-tester'; + +describe('typescript typings tests', () => { + it('should allow WebClient to work without a token', () => { + check([`${__dirname}/sources/webclient-no-token.ts`], `${__dirname}/tsconfig-strict.json`); + }); +}); + diff --git a/test/typescript/tsconfig-strict.json b/test/typescript/tsconfig-strict.json new file mode 100644 index 000000000..000aa5b96 --- /dev/null +++ b/test/typescript/tsconfig-strict.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "commonjs", + "sourceMap": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node" + } +} From 70b2d74ae98497e542660a764f74ac94a4551a31 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 20:46:26 -0700 Subject: [PATCH 04/24] lintstaged ignores test typescript --- .lintstagedrc.json | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.lintstagedrc.json b/.lintstagedrc.json index 7fb40aa7b..933d5ad87 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,3 +1,6 @@ { - "*.ts": ["tslint --project . --fix", "git add"] + "linters": { + "*.ts": ["tslint --project . --fix", "git add"] + }, + "ignore": ["test/**/*.ts"] } diff --git a/package.json b/package.json index 5f922f70b..37ac18c3c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lint": "tslint --project .", "test": "npm run test:spec && npm run test:integration", "test:spec": "nyc mocha --opts src/mocha.opts src/*.spec.js src/**/*.spec.js", - "test:integration": "nyc mocha --opts test/mocha.opts test/typescript/test.ts", + "test:integration": "npm run build && nyc mocha --opts test/mocha.opts test/typescript/test.ts", "coverage": "codecov", "build": "npm run build:clean && tsc", "build:clean": "shx rm -rf ./dist ./coverage ./.nyc_output", From 99db7155e2f6b93b6bc2a7fa5ab4e2960f1395bc Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 20:49:21 -0700 Subject: [PATCH 05/24] allow WebClient token to be undefined, fixes #482 --- src/WebClient.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WebClient.ts b/src/WebClient.ts index d27acc4e6..b21f23848 100644 --- a/src/WebClient.ts +++ b/src/WebClient.ts @@ -26,7 +26,7 @@ export class WebClient extends EventEmitter { /** * Authentication and authorization token for accessing Slack Web API (usually begins with `xoxp`, `xoxb`, or `xoxa`) */ - public readonly token: string; + public readonly token?: string; /** * The base URL for reaching Slack's Web API. Consider changing this value for testing purposes. @@ -73,7 +73,7 @@ export class WebClient extends EventEmitter { /** * @param token - An API token to authenticate/authorize with Slack (usually start with `xoxp`, `xoxb`, or `xoxa`) */ - constructor(token: string, { + constructor(token?: string, { slackApiUrl = 'https://slack.com/api/', logger = undefined, logLevel = LogLevel.INFO, From 93d835038adb2267cb518634e30806cba29ed387 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 20:55:46 -0700 Subject: [PATCH 06/24] allow integration test cases to take up to 4s before timing out --- test/mocha.opts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/mocha.opts b/test/mocha.opts index 1e41a38af..cd6c16f33 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,3 +1,4 @@ --require ts-node/register --require source-map-support/register --recursive +--timeout 4000 From 73dea9086623c5f5e41c226c5d2de5dd92c9ad66 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Wed, 14 Mar 2018 10:32:17 +0100 Subject: [PATCH 07/24] fix file upload - consider metadata options by creating form data, related to #307 --- .vscode/settings.json | 11 +++--- package-lock.json | 2 +- src/WebClient.spec.js | 90 ++++++++++++++++++++++++------------------- src/WebClient.ts | 28 +++++++------- 4 files changed, 72 insertions(+), 59 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 187764097..1c85fa9ac 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { - "typescript.tsdk": "./node_modules/typescript/lib", - "editor.rulers": [ - 120 - ] -} + "typescript.tsdk": "./node_modules/typescript/lib", + "editor.rulers": [ + 120 + ], + "editor.tabSize": 2, +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d2ddb0287..9ef1ad4ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@slack/client", - "version": "4.0.0-beta.1", + "version": "4.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index fc2e56860..e78cceca2 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -64,12 +64,12 @@ describe('WebClient', function () { }); }); - describe('apiCall()', function() { + describe('apiCall()', function () { beforeEach(function () { this.client = new WebClient(token, { retryConfig: fastRetriesForTest }); }); - describe('when making a successful call', function() { + describe('when making a successful call', function () { beforeEach(function () { this.scope = nock('https://slack.com') .post(/api/) @@ -149,9 +149,9 @@ describe('WebClient', function () { hum: false, }, }) - .then(() => { - scope.done(); - }); + .then(() => { + scope.done(); + }); }); it.skip('should remove undefined or null values from API arguments'); @@ -201,18 +201,28 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: imageBuffer, - filename: 'train.png', - }) + file: imageBuffer, + filename: 'train.png', + }) + .then((parts) => { + assert.lengthOf(parts.files, 1); + const file = parts.files[0]; + // options were not provided to the form builder + assert.include(file, { fieldname: 'file' }); + }); + }); + + it('should properly serialize when the file is an object with value as a Buffer and options containing filename', function () { + const imageBuffer = fs.readFileSync(path.resolve('test', 'fixtures', 'train.jpg')); + + // intentially vague about the method name + return this.client.apiCall('upload', { + file: { value: imageBuffer, options: { filename: 'train.png' } }, + filename: 'train.png', + }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - // TODO: understand why this assertion is failing. already employed the buffer metadata workaround, should - // look into the details about whether that workaround is still required, or why else the `source.on` is not - // defined error would occur, or if Slack just doesn't need a filename for the part - // assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); - // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if - // this was happening in the old implementation. assert.include(file, { fieldname: 'file' }); }); }); @@ -225,8 +235,8 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: imageBuffer, - }) + file: imageBuffer, + }) .then(() => { const output = this.capture.getCapturedText(); assert.isNotEmpty(output); @@ -241,8 +251,8 @@ describe('WebClient', function () { const imageStream = fs.createReadStream(path.resolve('test', 'fixtures', 'train.jpg')); return this.client.apiCall('upload', { - file: imageStream, - }) + file: imageStream, + }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; @@ -265,20 +275,20 @@ describe('WebClient', function () { describe('metadata in the user agent', function () { it('should set the user agent to contain package metadata', function () { const scope = nock('https://slack.com', { - reqheaders: { - 'User-Agent': (value) => { - const metadata = parseUserAgentIntoMetadata(value) - // NOTE: this assert isn't that strong and doesn't say anything about the values. at this time, there - // isn't a good way to test this without dupicating the logic of the code under test. - assert.containsAllKeys(metadata, ['node', '@slack:client']); - // NOTE: there's an assumption that if there's any keys besides these left at all, its the platform part - delete metadata.node; - delete metadata['@slack:client']; - assert.isNotEmpty(metadata); - return true; - }, + reqheaders: { + 'User-Agent': (value) => { + const metadata = parseUserAgentIntoMetadata(value) + // NOTE: this assert isn't that strong and doesn't say anything about the values. at this time, there + // isn't a good way to test this without dupicating the logic of the code under test. + assert.containsAllKeys(metadata, ['node', '@slack:client']); + // NOTE: there's an assumption that if there's any keys besides these left at all, its the platform part + delete metadata.node; + delete metadata['@slack:client']; + assert.isNotEmpty(metadata); + return true; }, - }) + }, + }) .post(/api/) .reply(200, { ok: true }); return this.client.apiCall('method') @@ -291,14 +301,14 @@ describe('WebClient', function () { const [name, version] = ['appmedataname', 'appmetadataversion']; addAppMetadata({ name, version }); const scope = nock('https://slack.com', { - reqheaders: { - 'User-Agent': (value) => { - const metadata = parseUserAgentIntoMetadata(value) - assert.propertyVal(metadata, name, version); - return true; - }, + reqheaders: { + 'User-Agent': (value) => { + const metadata = parseUserAgentIntoMetadata(value) + assert.propertyVal(metadata, name, version); + return true; }, - }) + }, + }) .post(/api/) .reply(200, { ok: true }); // NOTE: appMetaData is only evalued on client construction, so we cannot use the client already created @@ -331,7 +341,7 @@ describe('WebClient', function () { }); }) - describe('has option to change slackApiUrl', function() { + describe('has option to change slackApiUrl', function () { it('should send requests to an alternative URL', function () { const alternativeUrl = 'http://12.34.56.78/api/'; const scope = nock(alternativeUrl) @@ -344,7 +354,7 @@ describe('WebClient', function () { describe('has an option to set a custom HTTP agent', function () { // not confident how to test this. one idea is to use sinon to intercept method calls on the agent. - it.skip('should send a request using the custom agent', function() { + it.skip('should send a request using the custom agent', function () { const agent = new Agent(); const client = new WebClient(token, { agent }); return client.apiCall('method'); diff --git a/src/WebClient.ts b/src/WebClient.ts index d27acc4e6..40d9ab74f 100644 --- a/src/WebClient.ts +++ b/src/WebClient.ts @@ -524,18 +524,16 @@ export class WebClient extends EventEmitter { // 'fail. add the `filename` option to fix.'); // } - // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves - // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 - // @ts-ignore - // options.file = { - // // @ts-ignore - // value: options.file, - // options: { - // // @ts-ignore - // filename: options.filename, - // }, - // }; - // } + // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves + // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 + if (options['file'] && !options['file'].value) { + options['file'] = { + value: options['file'], + options: { + filename: options['filename'], + }, + }; + } } const flattened = objectEntries(options) @@ -555,6 +553,10 @@ export class WebClient extends EventEmitter { // a body with binary data should be serialized as multipart/form-data if (containsBinaryData) { return flattened.reduce((form, [key, value]) => { + if (key === 'file' && value.value) { + form.append(key, value.value, value.options); + return form; + } form.append(key, value); return form; }, new FormData()); @@ -658,7 +660,7 @@ interface FormCanBeURLEncoded { [key: string]: string | number | boolean; } -interface BodyCanBeFormMultipart extends Readable {} +interface BodyCanBeFormMultipart extends Readable { } /** * Determines whether a request body object should be treated as FormData-encodable (Content-Type=multipart/form-data). From 8e4d4ee5cb2fddeaea2bec92b1062a1ad289f213 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Wed, 14 Mar 2018 14:22:02 +0100 Subject: [PATCH 08/24] fix unregular build failure --- src/WebClient.spec.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index e78cceca2..4bb8cca4f 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -400,7 +400,7 @@ describe('WebClient', function () { // verify that any requests after maxRequestConcurrency were delayed by the responseDelay const queuedResponses = responses.slice(3); const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => assert.isAbove(r.diff, minDiff)); + queuedResponses.forEach(r => assert.isAtLeast(r.diff, minDiff)); }); }); @@ -413,13 +413,15 @@ describe('WebClient', function () { assert.lengthOf(responses, 2); // verify that maxRequestConcurrency requets were all sent concurrently - const concurrentResponses = responses.slice(0, 1); // the first 3 responses + const concurrentResponses = responses.slice(0, 1); // the first response concurrentResponses.forEach(r => assert.isBelow(r.diff, responseDelay)); // verify that any requests after maxRequestConcurrency were delayed by the responseDelay - const queuedResponses = responses.slice(1); + const queuedResponses = responses.slice(1);// the second response const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => assert.isAbove(r.diff, minDiff)); + queuedResponses.forEach(r => { + assert.isAtLeast(r.diff, minDiff) + }); }); }); From 9d0801ca761cd9f9391f5df176ca6f9f5a08de9d Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Tue, 13 Mar 2018 21:15:32 -0700 Subject: [PATCH 09/24] remove nyc from integration tests, it broke codecov --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 37ac18c3c..3bdae8b42 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "precommit": "lint-staged", "prepush": "npm run build", "lint": "tslint --project .", - "test": "npm run test:spec && npm run test:integration", + "test": "npm run build && npm run test:spec && npm run test:integration", "test:spec": "nyc mocha --opts src/mocha.opts src/*.spec.js src/**/*.spec.js", - "test:integration": "npm run build && nyc mocha --opts test/mocha.opts test/typescript/test.ts", + "test:integration": "mocha --opts test/mocha.opts test/typescript/test.ts", "coverage": "codecov", "build": "npm run build:clean && tsc", "build:clean": "shx rm -rf ./dist ./coverage ./.nyc_output", From 5ce84bbc8956d3c5be49c7b6caab51975d8e2570 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Wed, 14 Mar 2018 11:57:33 -0700 Subject: [PATCH 10/24] exports method argument types, fixes #483 --- src/index.ts | 2 ++ .../sources/method-argument-types.ts | 28 +++++++++++++++++++ test/typescript/test.ts | 4 +++ 3 files changed, 34 insertions(+) create mode 100644 test/typescript/sources/method-argument-types.ts diff --git a/src/index.ts b/src/index.ts index 7e31d9b6d..7cfc5f582 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,6 +32,8 @@ export { WebAPIResultCallback, } from './WebClient'; +export * from './methods'; + export { RTMClient, RTMClientOptions, diff --git a/test/typescript/sources/method-argument-types.ts b/test/typescript/sources/method-argument-types.ts new file mode 100644 index 000000000..33a493c68 --- /dev/null +++ b/test/typescript/sources/method-argument-types.ts @@ -0,0 +1,28 @@ +import { WebClient, ChatPostMessageArguments } from '../../../dist'; + +const web = new WebClient('TOKEN'); + +// calling a method directly with arbitrary arguments should work +web.chat.postMessage({ + channel: 'CHANNEL', + text: 'TEXT', + key: 'VALUE', +}); + +// calling a method directly with underspecified arguments should not work +// typings:expect-error +web.chat.postMessage({ + channel: 'CHANNEL', +}); + +// assigning an object with a specific type that includes arbitrary arguments should not work +const message: ChatPostMessageArguments = { + text: 'TEXT', + channel: 'CHANNEL', + // typings:expect-error + key: 'VALUE', +}; + +// this is just here to avoid the following error: +// 'message' is declared but its value is never read. +console.log(message); diff --git a/test/typescript/test.ts b/test/typescript/test.ts index 8f2baf4c2..de174327c 100644 --- a/test/typescript/test.ts +++ b/test/typescript/test.ts @@ -5,5 +5,9 @@ describe('typescript typings tests', () => { it('should allow WebClient to work without a token', () => { check([`${__dirname}/sources/webclient-no-token.ts`], `${__dirname}/tsconfig-strict.json`); }); + + it('should export method argument types and enforce strictness in the right ways', () => { + check([`${__dirname}/sources/method-argument-types.ts`], `${__dirname}/tsconfig-strict.json`); + }); }); From 7f8e5b726a701d699f125d2e9219ed35db4f7492 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Wed, 14 Mar 2018 13:15:05 -0700 Subject: [PATCH 11/24] more tightly specifies OAuthAccessArguments and OAuthTokenArguments, fixes #481 --- src/methods.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/methods.ts b/src/methods.ts index a3a37d4c2..9c3297e07 100644 --- a/src/methods.ts +++ b/src/methods.ts @@ -329,8 +329,19 @@ export type MPIMRepliesArguments = TokenOverridable & {}; /* * `oauth.*` */ -export type OAuthAccessArguments = TokenOverridable & {}; -export type OAuthTokenArguments = TokenOverridable & {}; +export type OAuthAccessArguments = { + client_id: string; + client_secret: string; + code: string; + redirect_uri?: string; +}; +export type OAuthTokenArguments = { + client_id: string; + client_secret: string; + code: string; + redirect_uri?: string; + single_channel?: boolean; +}; /* * `pins.*` From 8e4da081488f198760921677b79fa26fcf17fbfc Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Wed, 14 Mar 2018 13:26:42 -0700 Subject: [PATCH 12/24] removes pjson and directly requires package.json, fixes #478 --- package-lock.json | 5 ----- package.json | 1 - src/KeepAlive.ts | 4 ++-- src/RTMClient.ts | 4 ++-- src/WebClient.ts | 4 ++-- src/util.ts | 4 ++-- 6 files changed, 8 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee4c94e0b..3a64357f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5320,11 +5320,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, - "pjson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/pjson/-/pjson-1.0.9.tgz", - "integrity": "sha512-4hRJH3YzkUpOlShRzhyxAmThSNnAaIlWZCAb27hd0pVUAXNUAHAO7XZbsPPvsCYwBFEScTmCCL6DGE8NyZ8BdQ==" - }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", diff --git a/package.json b/package.json index 3bdae8b42..60feb9faf 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "p-cancelable": "^0.3.0", "p-queue": "^2.3.0", "p-retry": "^1.0.0", - "pjson": "^1.0.9", "retry": "^0.10.1", "url-join": "^4.0.0", "ws": "^4.1.0" diff --git a/src/KeepAlive.ts b/src/KeepAlive.ts index b77cc8b15..6d7390818 100644 --- a/src/KeepAlive.ts +++ b/src/KeepAlive.ts @@ -1,8 +1,8 @@ import { RTMClient, ErrorCode } from './'; import EventEmitter = require('eventemitter3'); // tslint:disable-line:import-name no-require-imports -import * as pjson from 'pjson'; import { LogLevel, Logger, LoggingFunc, getLogger, loggerFromLoggingFunc } from './logger'; import { errorWithCode } from './errors'; +const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires export interface KeepAliveOptions { logger?: LoggingFunc; @@ -50,7 +50,7 @@ export class KeepAlive extends EventEmitter { /** * The name used to prefix all logging generated from this object */ - private static loggerName = `${pjson.name}:KeepAlive`; + private static loggerName = `${pkg.name}:KeepAlive`; /** * This object's logger instance diff --git a/src/RTMClient.ts b/src/RTMClient.ts index def4faed3..088ab4a63 100644 --- a/src/RTMClient.ts +++ b/src/RTMClient.ts @@ -1,5 +1,4 @@ import { Agent } from 'http'; -import * as pjson from 'pjson'; import objectValues = require('object.values'); // tslint:disable-line:import-name no-require-imports import EventEmitter = require('eventemitter3'); // tslint:disable-line:import-name no-require-imports import WebSocket = require('ws'); // tslint:disable-line:import-name no-require-imports @@ -13,6 +12,7 @@ import { WebClient, WebAPICallResult, WebAPICallError, ErrorCode, CodedError } f import * as methods from './methods'; // tslint:disable-line:import-name import { errorWithCode } from './errors'; import { callbackify, TLSOptions } from './util'; +const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires /** * An RTMClient allows programs to communicate with the {@link https://api.slack.com/rtm|Slack Platform's RTM API}. @@ -272,7 +272,7 @@ export class RTMClient extends EventEmitter { /** * The name used to prefix all logging generated from this object */ - private static loggerName = `${pjson.name}:RTMClient`; + private static loggerName = `${pkg.name}:RTMClient`; /** diff --git a/src/WebClient.ts b/src/WebClient.ts index b21f23848..6b4fa4cad 100644 --- a/src/WebClient.ts +++ b/src/WebClient.ts @@ -1,6 +1,5 @@ import { Readable } from 'stream'; import objectEntries = require('object.entries'); // tslint:disable-line:no-require-imports -import * as pjson from 'pjson'; import urlJoin = require('url-join'); // tslint:disable-line:no-require-imports import isStream = require('is-stream'); // tslint:disable-line:no-require-imports import EventEmitter = require('eventemitter3'); // tslint:disable-line:import-name no-require-imports @@ -15,6 +14,7 @@ import { CodedError, errorWithCode, ErrorCode } from './errors'; import { LogLevel, Logger, LoggingFunc, getLogger, loggerFromLoggingFunc } from './logger'; import retryPolicies, { RetryOptions } from './retry-policies'; import Method, * as methods from './methods'; // tslint:disable-line:import-name +const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires /** * A client for Slack's Web API @@ -58,7 +58,7 @@ export class WebClient extends EventEmitter { /** * The name used to prefix all logging generated from this object */ - private static loggerName = `${pjson.name}:WebClient`; + private static loggerName = `${pkg.name}:WebClient`; /** * This object's logger instance diff --git a/src/util.ts b/src/util.ts index 1ead7f65b..878ffcf8e 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,8 +1,8 @@ import * as util from 'util'; import * as os from 'os'; -import * as pjson from 'pjson'; import { Agent } from 'http'; import objectEntries = require('object.entries'); // tslint:disable-line:no-require-imports +const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires /** * For when you need a function that does nothing @@ -17,7 +17,7 @@ function replaceSlashes(s: string): string { return s.replace('/', ':'); } -const baseUserAgent = `${replaceSlashes(pjson.name)}/${pjson.version} ` + +const baseUserAgent = `${replaceSlashes(pkg.name)}/${pkg.version} ` + `node/${process.version.replace('v', '')} ` + `${os.platform()}/${os.release()}`; From 501b0aff8cd602c3d8189129663243d860557db6 Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Wed, 14 Mar 2018 13:51:58 -0700 Subject: [PATCH 13/24] update for boolean flag quirk --- src/methods.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/methods.ts b/src/methods.ts index 9c3297e07..636ff8d21 100644 --- a/src/methods.ts +++ b/src/methods.ts @@ -340,7 +340,7 @@ export type OAuthTokenArguments = { client_secret: string; code: string; redirect_uri?: string; - single_channel?: boolean; + single_channel?: '0' | '1'; }; /* From 8ce3b6176293c2b02ede7d1f6ff94fe18c50f46f Mon Sep 17 00:00:00 2001 From: Ankur Oberoi Date: Wed, 14 Mar 2018 16:34:32 -0700 Subject: [PATCH 14/24] v4.0.1 --- docs/_posts/2018-03-14-v4.0.1.md | 12 ++ docs/_reference/WebClient.md | 23 +-- package-lock.json | 10 +- package.json | 2 +- support/jsdoc/@slack-client-dist-methods.js | 6 + support/jsdoc/@slack-client.js | 206 +------------------- 6 files changed, 40 insertions(+), 219 deletions(-) create mode 100644 docs/_posts/2018-03-14-v4.0.1.md diff --git a/docs/_posts/2018-03-14-v4.0.1.md b/docs/_posts/2018-03-14-v4.0.1.md new file mode 100644 index 000000000..b44be9b7c --- /dev/null +++ b/docs/_posts/2018-03-14-v4.0.1.md @@ -0,0 +1,12 @@ +--- +layout: changelog +--- + +- Fixes crash in projects where `"name"` or `"version"` were not defined in the `package.json` file (#478) - thanks @wilhelmklopp @clavin @aoberoi +- Fixes `IncomingWebhook.send()` to parse the response as text instead of JSON (#477) - thanks @aoberoi +- Allows `IncomingWebhook` to be initialized without defaults (#479) - thanks @aoberoi +- Allows `WebClient` to be initialized without a `token` in TypeScript (#482) - thanks @aoberoi +- Allows unspecificed arguments to be used with `WebClient` method aliases and `apiCall()` (#484) - thanks @clavin +- Exports method argument types as top level exports in the type declarations (#483) - thanks @aoberoi +- Fixes inaccurate property type for `as_user` in `ChatPostMessageArguments` (#475) - thanks @harveyr +- Improves the `OAuthAccessArguments` and `OAuthTokenArguments` types (#481) - thanks @aoberoi diff --git a/docs/_reference/WebClient.md b/docs/_reference/WebClient.md index bb44e3d47..895606048 100644 --- a/docs/_reference/WebClient.md +++ b/docs/_reference/WebClient.md @@ -8,8 +8,8 @@ A client for Slack's Web API This client provides an alias for each [Web API method](https://api.slack.com/methods). Each method is a convenience wrapper for calling the [WebClient#apiCall](WebClient#apiCall) method using the method name as the first parameter. -**Kind**: static class of [@slack/client](#module_@slack/client) -**Extends**: EventEmitter +**Kind**: static class of [@slack/client](#module_@slack/client) +**Extends**: EventEmitter **Properties** | Name | Type | Description | @@ -17,6 +17,7 @@ a convenience wrapper for calling the [WebClient#apiCall](WebClient#apiCall) met | [token] | string | Authentication and authorization token for accessing Slack Web API (usually begins with `xoxp`, `xoxb`, or `xoxa`) | | [slackApiUrl] | string | The base URL for reaching Slack's Web API. Consider changing this value for testing purposes. | + * [.WebClient](#module_@slack/client.WebClient) ⇐ EventEmitter * [.apiCall(method, options)](#module_@slack/client.WebClient+apiCall) ⇒ [Promise.<WebAPICallResult>](#module_@slack/client.WebAPICallResult) * [.apiCall(method, options, callback)](#module_@slack/client.WebClient+apiCall) @@ -27,7 +28,7 @@ a convenience wrapper for calling the [WebClient#apiCall](WebClient#apiCall) met ### webClient.apiCall(method, options) ⇒ [Promise.<WebAPICallResult>](#module_@slack/client.WebAPICallResult) Generic method for calling a Web API method -**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) +**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) | Param | Type | Description | | --- | --- | --- | @@ -37,22 +38,22 @@ Generic method for calling a Web API method ### webClient.apiCall(method, options, callback) -**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) +**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) | Param | Type | | --- | --- | -| method | string | -| options | [WebAPICallOptions](#module_@slack/client.WebAPICallOptions) | -| callback | [WebAPIResultCallback](#module_@slack/client.WebAPIResultCallback) | +| method | string | +| options | [WebAPICallOptions](#module_@slack/client.WebAPICallOptions) | +| callback | [WebAPIResultCallback](#module_@slack/client.WebAPIResultCallback) | ### webClient.apiCall(method, options, callback) -**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) +**Kind**: instance method of [WebClient](#module_@slack/client.WebClient) | Param | Type | | --- | --- | -| method | string | -| options | [WebAPICallOptions](#module_@slack/client.WebAPICallOptions) | -| callback | [WebAPIResultCallback](#module_@slack/client.WebAPIResultCallback) | +| method | string | +| options | [WebAPICallOptions](#module_@slack/client.WebAPICallOptions) | +| callback | [WebAPIResultCallback](#module_@slack/client.WebAPIResultCallback) | diff --git a/package-lock.json b/package-lock.json index 3a64357f8..beab36912 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@slack/client", - "version": "4.0.0", + "version": "4.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2266,7 +2266,7 @@ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "requires": { "prepend-http": "2.0.0", - "query-string": "5.1.0", + "query-string": "5.1.1", "sort-keys": "2.0.0" } }, @@ -5365,9 +5365,9 @@ "dev": true }, "query-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz", - "integrity": "sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "0.2.0", "object-assign": "4.1.1", diff --git a/package.json b/package.json index 60feb9faf..acfa48109 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@slack/client", - "version": "4.0.0", + "version": "4.0.1", "description": "Slack Developer Kit - official clients for the Web API, RTM API, and Incoming Webhooks", "author": "Slack Technologies, Inc.", "license": "MIT", diff --git a/support/jsdoc/@slack-client-dist-methods.js b/support/jsdoc/@slack-client-dist-methods.js index 7f3cdcf2f..81a422971 100644 --- a/support/jsdoc/@slack-client-dist-methods.js +++ b/support/jsdoc/@slack-client-dist-methods.js @@ -2,6 +2,12 @@ * @module @slack/client/dist/methods */ +/** + * @interface module:@slack/client/dist/methods.AuxiliaryArguments + */ +export class AuxiliaryArguments { +} + /** * @interface module:@slack/client/dist/methods.CursorPaginationEnabled * @property {number} [limit] diff --git a/support/jsdoc/@slack-client.js b/support/jsdoc/@slack-client.js index 7650a60a2..eded26636 100644 --- a/support/jsdoc/@slack-client.js +++ b/support/jsdoc/@slack-client.js @@ -1,4 +1,4 @@ -/** +/** * @module @slack/client */ @@ -133,12 +133,12 @@ export class RTMClient { * Generic method for sending an outgoing message of an arbitrary type. This method guards the higher-level methods * from concern of which state the client is in, because it places all messages into a queue. The tasks on the queue * will buffer until the client is in a state where they can be sent. - * + * * If the awaitReply parameter is set to true, then the returned Promise is resolved with the platform's * acknowledgement response. Not all message types will result in an acknowledgement response, so use this carefully. * This promise may be rejected with an error containing code=RTMNoReplyReceivedError if the client disconnects or * reconnects before recieving the acknowledgement response. - * + * * If the awaitReply parameter is set to false, then the returned Promise is resolved as soon as the message is sent * from the websocket. * @param {"undefined"} awaitReply whether to wait for an acknowledgement response from the platform before resolving the returned @@ -337,210 +337,12 @@ export class WebAPIResultCallback { /** * A client for Slack's Web API - * + * * This client provides an alias for each {@link https://api.slack.com/methods|Web API method}. Each method is * a convenience wrapper for calling the {@link WebClient#apiCall} method using the method name as the first parameter. * @extends EventEmitter * @property {string} [token] Authentication and authorization token for accessing Slack Web API (usually begins with `xoxp`, `xoxb`, or `xoxa`) * @property {string} [slackApiUrl] The base URL for reaching Slack's Web API. Consider changing this value for testing purposes. - * @property {module:@slack/client/dist/WebClient.__object} [api={ - test: (this.apiCall.bind(this, 'api.test')) as Method, - }] api method family - * @property {module:@slack/client/dist/WebClient.__object} [apps={ - permissions: { - info: (this.apiCall.bind(this, 'apps.permissions.info')) as Method, - request: (this.apiCall.bind(this, 'apps.permissions.request')) as Method, - }, - }] apps method family - * @property {module:@slack/client/dist/WebClient.__object} [auth={ - revoke: (this.apiCall.bind(this, 'auth.revoke')) as Method, - test: (this.apiCall.bind(this, 'auth.test')) as Method, - }] auth method family - * @property {module:@slack/client/dist/WebClient.__object} [bots={ - info: (this.apiCall.bind(this, 'bots.info')) as Method, - }] bots method family - * @property {module:@slack/client/dist/WebClient.__object} [channels={ - archive: (this.apiCall.bind(this, 'channels.archive')) as Method, - create: (this.apiCall.bind(this, 'channels.create')) as Method, - history: (this.apiCall.bind(this, 'channels.history')) as Method, - info: (this.apiCall.bind(this, 'channels.info')) as Method, - invite: (this.apiCall.bind(this, 'channels.invite')) as Method, - join: (this.apiCall.bind(this, 'channels.join')) as Method, - kick: (this.apiCall.bind(this, 'channels.kick')) as Method, - leave: (this.apiCall.bind(this, 'channels.leave')) as Method, - list: (this.apiCall.bind(this, 'channels.list')) as Method, - mark: (this.apiCall.bind(this, 'channels.mark')) as Method, - rename: (this.apiCall.bind(this, 'channels.rename')) as Method, - replies: (this.apiCall.bind(this, 'channels.replies')) as Method, - setPurpose: (this.apiCall.bind(this, 'channels.setPurpose')) as Method, - setTopic: (this.apiCall.bind(this, 'channels.setTopic')) as Method, - unarchive: (this.apiCall.bind(this, 'channels.unarchive')) as Method, - }] channels method family - * @property {module:@slack/client/dist/WebClient.__object} [chat={ - delete: (this.apiCall.bind(this, 'chat.delete')) as Method, - getPermalink: (this.apiCall.bind(this, 'chat.getPermalink')) as Method, - meMessage: (this.apiCall.bind(this, 'chat.meMessage')) as Method, - postEphemeral: (this.apiCall.bind(this, 'chat.postEphemeral')) as Method, - postMessage: (this.apiCall.bind(this, 'chat.postMessage')) as Method, - unfurl: (this.apiCall.bind(this, 'chat.unfurl')) as Method, - update: (this.apiCall.bind(this, 'chat.update')) as Method, - }] chat method family - * @property {module:@slack/client/dist/WebClient.__object} [conversations={ - archive: (this.apiCall.bind(this, 'conversations.archive')) as Method, - close: (this.apiCall.bind(this, 'conversations.close')) as Method, - create: (this.apiCall.bind(this, 'conversations.create')) as Method, - history: (this.apiCall.bind(this, 'conversations.history')) as Method, - info: (this.apiCall.bind(this, 'conversations.info')) as Method, - invite: (this.apiCall.bind(this, 'conversations.invite')) as Method, - join: (this.apiCall.bind(this, 'conversations.join')) as Method, - kick: (this.apiCall.bind(this, 'conversations.kick')) as Method, - leave: (this.apiCall.bind(this, 'conversations.leave')) as Method, - list: (this.apiCall.bind(this, 'conversations.list')) as Method, - members: (this.apiCall.bind(this, 'conversations.members')) as Method, - open: (this.apiCall.bind(this, 'conversations.open')) as Method, - rename: (this.apiCall.bind(this, 'conversations.rename')) as Method, - replies: (this.apiCall.bind(this, 'conversations.replies')) as Method, - setPurpose: - (this.apiCall.bind(this, 'conversations.setPurpose')) as Method, - setTopic: (this.apiCall.bind(this, 'conversations.setTopic')) as Method, - unarchive: (this.apiCall.bind(this, 'conversations.unarchive')) as Method, - }] conversations method family - * @property {module:@slack/client/dist/WebClient.__object} [dialog={ - open: (this.apiCall.bind(this, 'dialog.open')) as Method, - }] dialog method family - * @property {module:@slack/client/dist/WebClient.__object} [dnd={ - endDnd: (this.apiCall.bind(this, 'dnd.endDnd')) as Method, - endSnooze: (this.apiCall.bind(this, 'dnd.endSnooze')) as Method, - info: (this.apiCall.bind(this, 'dnd.info')) as Method, - setSnooze: (this.apiCall.bind(this, 'dnd.setSnooze')) as Method, - teamInfo: (this.apiCall.bind(this, 'dnd.teamInfo')) as Method, - }] dnd method family - * @property {module:@slack/client/dist/WebClient.__object} [emoji={ - list: (this.apiCall.bind(this, 'emoji.list')) as Method, - }] emoji method family - * @property {module:@slack/client/dist/WebClient.__object} [files={ - delete: (this.apiCall.bind(this, 'files.delete')) as Method, - info: (this.apiCall.bind(this, 'files.info')) as Method, - list: (this.apiCall.bind(this, 'files.list')) as Method, - revokePublicURL: - (this.apiCall.bind(this, 'files.revokePublicURL')) as Method, - sharedPublicURL: - (this.apiCall.bind(this, 'files.sharedPublicURL')) as Method, - upload: (this.apiCall.bind(this, 'files.upload')) as Method, - comments: { - add: (this.apiCall.bind(this, 'files.comments.add')) as Method, - delete: (this.apiCall.bind(this, 'files.comments.delete')) as Method, - edit: (this.apiCall.bind(this, 'files.comments.edit')) as Method, - }, - }] files method family - * @property {module:@slack/client/dist/WebClient.__object} [groups={ - archive: (this.apiCall.bind(this, 'groups.archive')) as Method, - create: (this.apiCall.bind(this, 'groups.create')) as Method, - createChild: (this.apiCall.bind(this, 'groups.createChild')) as Method, - history: (this.apiCall.bind(this, 'groups.history')) as Method, - info: (this.apiCall.bind(this, 'groups.info')) as Method, - invite: (this.apiCall.bind(this, 'groups.invite')) as Method, - kick: (this.apiCall.bind(this, 'groups.kick')) as Method, - leave: (this.apiCall.bind(this, 'groups.leave')) as Method, - list: (this.apiCall.bind(this, 'groups.list')) as Method, - mark: (this.apiCall.bind(this, 'groups.mark')) as Method, - open: (this.apiCall.bind(this, 'groups.open')) as Method, - rename: (this.apiCall.bind(this, 'groups.rename')) as Method, - replies: (this.apiCall.bind(this, 'groups.replies')) as Method, - setPurpose: (this.apiCall.bind(this, 'groups.setPurpose')) as Method, - setTopic: (this.apiCall.bind(this, 'groups.setTopic')) as Method, - unarchive: (this.apiCall.bind(this, 'groups.unarchive')) as Method, - }] groups method family - * @property {module:@slack/client/dist/WebClient.__object} [im={ - close: (this.apiCall.bind(this, 'im.close')) as Method, - history: (this.apiCall.bind(this, 'im.history')) as Method, - list: (this.apiCall.bind(this, 'im.list')) as Method, - mark: (this.apiCall.bind(this, 'im.mark')) as Method, - open: (this.apiCall.bind(this, 'im.open')) as Method, - replies: (this.apiCall.bind(this, 'im.replies')) as Method, - }] im method family - * @property {module:@slack/client/dist/WebClient.__object} [migration={ - exchange: (this.apiCall.bind(this, 'migration.exchange')) as Method, - }] migration method family - * @property {module:@slack/client/dist/WebClient.__object} [mpim={ - close: (this.apiCall.bind(this, 'mpim.close')) as Method, - history: (this.apiCall.bind(this, 'mpim.history')) as Method, - list: (this.apiCall.bind(this, 'mpim.list')) as Method, - mark: (this.apiCall.bind(this, 'mpim.mark')) as Method, - open: (this.apiCall.bind(this, 'mpim.open')) as Method, - replies: (this.apiCall.bind(this, 'mpim.replies')) as Method, - }] mpim method family - * @property {module:@slack/client/dist/WebClient.__object} [oauth={ - access: (this.apiCall.bind(this, 'oauth.access')) as Method, - token: (this.apiCall.bind(this, 'oauth.token')) as Method, - }] oauth method family - * @property {module:@slack/client/dist/WebClient.__object} [pins={ - add: (this.apiCall.bind(this, 'pins.add')) as Method, - list: (this.apiCall.bind(this, 'pins.list')) as Method, - remove: (this.apiCall.bind(this, 'pins.remove')) as Method, - }] pins method family - * @property {module:@slack/client/dist/WebClient.__object} [reactions={ - add: (this.apiCall.bind(this, 'reactions.add')) as Method, - get: (this.apiCall.bind(this, 'reactions.get')) as Method, - list: (this.apiCall.bind(this, 'reactions.list')) as Method, - remove: (this.apiCall.bind(this, 'reactions.remove')) as Method, - }] reactions method family - * @property {module:@slack/client/dist/WebClient.__object} [reminders={ - add: (this.apiCall.bind(this, 'reminders.add')) as Method, - complete: (this.apiCall.bind(this, 'reminders.complete')) as Method, - delete: (this.apiCall.bind(this, 'reminders.delete')) as Method, - info: (this.apiCall.bind(this, 'reminders.info')) as Method, - list: (this.apiCall.bind(this, 'reminders.list')) as Method, - }] reminders method family - * @property {module:@slack/client/dist/WebClient.__object} [rtm={ - connect: (this.apiCall.bind(this, 'rtm.connect')) as Method, - start: (this.apiCall.bind(this, 'rtm.start')) as Method, - }] rtm method family - * @property {module:@slack/client/dist/WebClient.__object} [search={ - all: (this.apiCall.bind(this, 'search.all')) as Method, - files: (this.apiCall.bind(this, 'search.files')) as Method, - messages: (this.apiCall.bind(this, 'search.messages')) as Method, - }] search method family - * @property {module:@slack/client/dist/WebClient.__object} [stars={ - add: (this.apiCall.bind(this, 'stars.add')) as Method, - list: (this.apiCall.bind(this, 'stars.list')) as Method, - remove: (this.apiCall.bind(this, 'stars.remove')) as Method, - }] stars method family - * @property {module:@slack/client/dist/WebClient.__object} [team={ - accessLogs: (this.apiCall.bind(this, 'team.accessLogs')) as Method, - billableInfo: (this.apiCall.bind(this, 'team.billableInfo')) as Method, - info: (this.apiCall.bind(this, 'team.info')) as Method, - integrationLogs: (this.apiCall.bind(this, 'team.integrationLogs')) as Method, - profile: { - get: (this.apiCall.bind(this, 'team.profile.get')) as Method, - }, - }] team method family - * @property {module:@slack/client/dist/WebClient.__object} [usergroups={ - create: (this.apiCall.bind(this, 'usergroups.create')) as Method, - disable: (this.apiCall.bind(this, 'usergroups.disable')) as Method, - enable: (this.apiCall.bind(this, 'usergroups.enable')) as Method, - list: (this.apiCall.bind(this, 'usergroups.list')) as Method, - update: (this.apiCall.bind(this, 'usergroups.update')) as Method, - users: { - list: (this.apiCall.bind(this, 'usergroups.users.list')) as Method, - update: (this.apiCall.bind(this, 'usergroups.users.update')) as Method, - }, - }] usergroups method family - * @property {module:@slack/client/dist/WebClient.__object} [users={ - deletePhoto: (this.apiCall.bind(this, 'users.deletePhoto')) as Method, - getPresence: (this.apiCall.bind(this, 'users.getPresence')) as Method, - identity: (this.apiCall.bind(this, 'users.identity')) as Method, - info: (this.apiCall.bind(this, 'users.info')) as Method, - list: (this.apiCall.bind(this, 'users.list')) as Method, - lookupByEmail: (this.apiCall.bind(this, 'users.lookupByEmail')) as Method, - setActive: (this.apiCall.bind(this, 'users.setActive')) as Method, - setPhoto: (this.apiCall.bind(this, 'users.setPhoto')) as Method, - setPresence: (this.apiCall.bind(this, 'users.setPresence')) as Method, - profile: { - get: (this.apiCall.bind(this, 'users.profile.get')) as Method, - set: (this.apiCall.bind(this, 'users.profile.set')) as Method, - }, - }] users method family */ export class WebClient { /** From e96b059f52ce759cbec62ade38dd12937720c991 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 09:47:20 +0100 Subject: [PATCH 15/24] add assertion for filename --- src/WebClient.spec.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index 4bb8cca4f..9334374a4 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -217,13 +217,18 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: { value: imageBuffer, options: { filename: 'train.png' } }, - filename: 'train.png', + file: { value: imageBuffer, options: { filename: 'train.jpg' } }, + filename: 'train.jpg', }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - assert.include(file, { fieldname: 'file' }); + assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); + // TODO: understand why this assertion was failing. already employed the buffer metadata workaround, should + // look into the details about whether that workaround is still required, or why else the `source.on` is not + // defined error would occur, or if Slack just doesn't need a filename for the part + // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if + // this was happening in the old implementation. }); }); @@ -256,14 +261,14 @@ describe('WebClient', function () { .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - // TODO: understand why this assertion is failing. already employed the buffer metadata workaround, should + // TODO: understand why this assertion was failing. already employed the buffer metadata workaround, should // look into the details about whether that workaround is still required, or why else the `source.on` is not // defined error would occur, or if Slack just doesn't need a filename for the part - // assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); + assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if // this was happening in the old implementation. - assert.include(file, { fieldname: 'file' }); + // assert.include(file, { fieldname: 'file' }); }); }); From ba661a7824af21862d4ffa4e29d3111583c2e721 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 09:58:37 +0100 Subject: [PATCH 16/24] put forEach statement in one line --- src/WebClient.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index 9334374a4..010fc270a 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -424,9 +424,7 @@ describe('WebClient', function () { // verify that any requests after maxRequestConcurrency were delayed by the responseDelay const queuedResponses = responses.slice(1);// the second response const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => { - assert.isAtLeast(r.diff, minDiff) - }); + queuedResponses.forEach(r => { assert.isAtLeast(r.diff, minDiff) }); }); }); From 45c77022a81cd2631a5a2bd3ee0dd29e401f51d7 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Wed, 14 Mar 2018 10:32:17 +0100 Subject: [PATCH 17/24] fix file upload - consider metadata options by creating form data, related to #307 --- .vscode/settings.json | 11 +++--- package-lock.json | 2 +- src/WebClient.spec.js | 90 ++++++++++++++++++++++++------------------- src/WebClient.ts | 28 +++++++------- 4 files changed, 72 insertions(+), 59 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 187764097..1c85fa9ac 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { - "typescript.tsdk": "./node_modules/typescript/lib", - "editor.rulers": [ - 120 - ] -} + "typescript.tsdk": "./node_modules/typescript/lib", + "editor.rulers": [ + 120 + ], + "editor.tabSize": 2, +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index beab36912..9327ccfd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6404,4 +6404,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index 7f42efba8..7392b9227 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -69,12 +69,12 @@ describe('WebClient', function () { }); }); - describe('apiCall()', function() { + describe('apiCall()', function () { beforeEach(function () { this.client = new WebClient(token, { retryConfig: fastRetriesForTest }); }); - describe('when making a successful call', function() { + describe('when making a successful call', function () { beforeEach(function () { this.scope = nock('https://slack.com') .post(/api/) @@ -154,9 +154,9 @@ describe('WebClient', function () { hum: false, }, }) - .then(() => { - scope.done(); - }); + .then(() => { + scope.done(); + }); }); it.skip('should remove undefined or null values from API arguments'); @@ -206,18 +206,28 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: imageBuffer, - filename: 'train.png', - }) + file: imageBuffer, + filename: 'train.png', + }) + .then((parts) => { + assert.lengthOf(parts.files, 1); + const file = parts.files[0]; + // options were not provided to the form builder + assert.include(file, { fieldname: 'file' }); + }); + }); + + it('should properly serialize when the file is an object with value as a Buffer and options containing filename', function () { + const imageBuffer = fs.readFileSync(path.resolve('test', 'fixtures', 'train.jpg')); + + // intentially vague about the method name + return this.client.apiCall('upload', { + file: { value: imageBuffer, options: { filename: 'train.png' } }, + filename: 'train.png', + }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - // TODO: understand why this assertion is failing. already employed the buffer metadata workaround, should - // look into the details about whether that workaround is still required, or why else the `source.on` is not - // defined error would occur, or if Slack just doesn't need a filename for the part - // assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); - // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if - // this was happening in the old implementation. assert.include(file, { fieldname: 'file' }); }); }); @@ -230,8 +240,8 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: imageBuffer, - }) + file: imageBuffer, + }) .then(() => { const output = this.capture.getCapturedText(); assert.isNotEmpty(output); @@ -246,8 +256,8 @@ describe('WebClient', function () { const imageStream = fs.createReadStream(path.resolve('test', 'fixtures', 'train.jpg')); return this.client.apiCall('upload', { - file: imageStream, - }) + file: imageStream, + }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; @@ -270,20 +280,20 @@ describe('WebClient', function () { describe('metadata in the user agent', function () { it('should set the user agent to contain package metadata', function () { const scope = nock('https://slack.com', { - reqheaders: { - 'User-Agent': (value) => { - const metadata = parseUserAgentIntoMetadata(value) - // NOTE: this assert isn't that strong and doesn't say anything about the values. at this time, there - // isn't a good way to test this without dupicating the logic of the code under test. - assert.containsAllKeys(metadata, ['node', '@slack:client']); - // NOTE: there's an assumption that if there's any keys besides these left at all, its the platform part - delete metadata.node; - delete metadata['@slack:client']; - assert.isNotEmpty(metadata); - return true; - }, + reqheaders: { + 'User-Agent': (value) => { + const metadata = parseUserAgentIntoMetadata(value) + // NOTE: this assert isn't that strong and doesn't say anything about the values. at this time, there + // isn't a good way to test this without dupicating the logic of the code under test. + assert.containsAllKeys(metadata, ['node', '@slack:client']); + // NOTE: there's an assumption that if there's any keys besides these left at all, its the platform part + delete metadata.node; + delete metadata['@slack:client']; + assert.isNotEmpty(metadata); + return true; }, - }) + }, + }) .post(/api/) .reply(200, { ok: true }); return this.client.apiCall('method') @@ -296,14 +306,14 @@ describe('WebClient', function () { const [name, version] = ['appmedataname', 'appmetadataversion']; addAppMetadata({ name, version }); const scope = nock('https://slack.com', { - reqheaders: { - 'User-Agent': (value) => { - const metadata = parseUserAgentIntoMetadata(value) - assert.propertyVal(metadata, name, version); - return true; - }, + reqheaders: { + 'User-Agent': (value) => { + const metadata = parseUserAgentIntoMetadata(value) + assert.propertyVal(metadata, name, version); + return true; }, - }) + }, + }) .post(/api/) .reply(200, { ok: true }); // NOTE: appMetaData is only evalued on client construction, so we cannot use the client already created @@ -351,7 +361,7 @@ describe('WebClient', function () { }); }) - describe('has option to change slackApiUrl', function() { + describe('has option to change slackApiUrl', function () { it('should send requests to an alternative URL', function () { const alternativeUrl = 'http://12.34.56.78/api/'; const scope = nock(alternativeUrl) @@ -364,7 +374,7 @@ describe('WebClient', function () { describe('has an option to set a custom HTTP agent', function () { // not confident how to test this. one idea is to use sinon to intercept method calls on the agent. - it.skip('should send a request using the custom agent', function() { + it.skip('should send a request using the custom agent', function () { const agent = new Agent(); const client = new WebClient(token, { agent }); return client.apiCall('method'); diff --git a/src/WebClient.ts b/src/WebClient.ts index 6b4fa4cad..5326bb989 100644 --- a/src/WebClient.ts +++ b/src/WebClient.ts @@ -524,18 +524,16 @@ export class WebClient extends EventEmitter { // 'fail. add the `filename` option to fix.'); // } - // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves - // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 - // @ts-ignore - // options.file = { - // // @ts-ignore - // value: options.file, - // options: { - // // @ts-ignore - // filename: options.filename, - // }, - // }; - // } + // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves + // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 + if (options['file'] && !options['file'].value) { + options['file'] = { + value: options['file'], + options: { + filename: options['filename'], + }, + }; + } } const flattened = objectEntries(options) @@ -555,6 +553,10 @@ export class WebClient extends EventEmitter { // a body with binary data should be serialized as multipart/form-data if (containsBinaryData) { return flattened.reduce((form, [key, value]) => { + if (key === 'file' && value.value) { + form.append(key, value.value, value.options); + return form; + } form.append(key, value); return form; }, new FormData()); @@ -658,7 +660,7 @@ interface FormCanBeURLEncoded { [key: string]: string | number | boolean; } -interface BodyCanBeFormMultipart extends Readable {} +interface BodyCanBeFormMultipart extends Readable { } /** * Determines whether a request body object should be treated as FormData-encodable (Content-Type=multipart/form-data). From c1d65b58eb872565b572e6a05bd7c9f3ece5657c Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Wed, 14 Mar 2018 14:22:02 +0100 Subject: [PATCH 18/24] fix unregular build failure --- src/WebClient.spec.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index 7392b9227..f422b874b 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -420,7 +420,7 @@ describe('WebClient', function () { // verify that any requests after maxRequestConcurrency were delayed by the responseDelay const queuedResponses = responses.slice(3); const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => assert.isAbove(r.diff, minDiff)); + queuedResponses.forEach(r => assert.isAtLeast(r.diff, minDiff)); }); }); @@ -433,13 +433,15 @@ describe('WebClient', function () { assert.lengthOf(responses, 2); // verify that maxRequestConcurrency requets were all sent concurrently - const concurrentResponses = responses.slice(0, 1); // the first 3 responses + const concurrentResponses = responses.slice(0, 1); // the first response concurrentResponses.forEach(r => assert.isBelow(r.diff, responseDelay)); // verify that any requests after maxRequestConcurrency were delayed by the responseDelay - const queuedResponses = responses.slice(1); + const queuedResponses = responses.slice(1);// the second response const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => assert.isAbove(r.diff, minDiff)); + queuedResponses.forEach(r => { + assert.isAtLeast(r.diff, minDiff) + }); }); }); From bb5854186d3644c16a77ee7c51c925793d943cc0 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 09:47:20 +0100 Subject: [PATCH 19/24] add assertion for filename --- src/WebClient.spec.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index f422b874b..6db7859f8 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -222,13 +222,18 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { - file: { value: imageBuffer, options: { filename: 'train.png' } }, - filename: 'train.png', + file: { value: imageBuffer, options: { filename: 'train.jpg' } }, + filename: 'train.jpg', }) .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - assert.include(file, { fieldname: 'file' }); + assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); + // TODO: understand why this assertion was failing. already employed the buffer metadata workaround, should + // look into the details about whether that workaround is still required, or why else the `source.on` is not + // defined error would occur, or if Slack just doesn't need a filename for the part + // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if + // this was happening in the old implementation. }); }); @@ -261,14 +266,14 @@ describe('WebClient', function () { .then((parts) => { assert.lengthOf(parts.files, 1); const file = parts.files[0]; - // TODO: understand why this assertion is failing. already employed the buffer metadata workaround, should + // TODO: understand why this assertion was failing. already employed the buffer metadata workaround, should // look into the details about whether that workaround is still required, or why else the `source.on` is not // defined error would occur, or if Slack just doesn't need a filename for the part - // assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); + assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if // this was happening in the old implementation. - assert.include(file, { fieldname: 'file' }); + // assert.include(file, { fieldname: 'file' }); }); }); From e7bbd382c1885bdb2086ef4ef6a962ac1ce6b73d Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 09:58:37 +0100 Subject: [PATCH 20/24] put forEach statement in one line --- src/WebClient.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index 6db7859f8..c20fa45ec 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -444,9 +444,7 @@ describe('WebClient', function () { // verify that any requests after maxRequestConcurrency were delayed by the responseDelay const queuedResponses = responses.slice(1);// the second response const minDiff = concurrentResponses[concurrentResponses.length - 1].diff + responseDelay; - queuedResponses.forEach(r => { - assert.isAtLeast(r.diff, minDiff) - }); + queuedResponses.forEach(r => { assert.isAtLeast(r.diff, minDiff) }); }); }); From b0a7d94b0bfc07e724618e4a8f1084f19ac2b1ca Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 14:22:57 +0100 Subject: [PATCH 21/24] resolve merge conflict --- package-lock.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7d7555bce..9327ccfd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,10 +1,6 @@ { "name": "@slack/client", -<<<<<<< HEAD "version": "4.0.1", -======= - "version": "4.0.0", ->>>>>>> ba661a7824af21862d4ffa4e29d3111583c2e721 "lockfileVersion": 1, "requires": true, "dependencies": { From 189905039fc426074f55477529a76330553330de Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Thu, 15 Mar 2018 16:09:22 +0100 Subject: [PATCH 22/24] increase test timeout in order to avoid unexpected build failure --- test/typescript/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/typescript/test.ts b/test/typescript/test.ts index de174327c..a64fca825 100644 --- a/test/typescript/test.ts +++ b/test/typescript/test.ts @@ -4,7 +4,7 @@ import { check, checkDirectory } from 'typings-tester'; describe('typescript typings tests', () => { it('should allow WebClient to work without a token', () => { check([`${__dirname}/sources/webclient-no-token.ts`], `${__dirname}/tsconfig-strict.json`); - }); + }).timeout(10000); it('should export method argument types and enforce strictness in the right ways', () => { check([`${__dirname}/sources/method-argument-types.ts`], `${__dirname}/tsconfig-strict.json`); From 6de72b3a9ea858db7eac91990e9e09c1f170286f Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Fri, 16 Mar 2018 10:24:48 +0100 Subject: [PATCH 23/24] increase mocha tests timeout to 10 sec --- test/mocha.opts | 2 +- test/typescript/test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/mocha.opts b/test/mocha.opts index cd6c16f33..3711a4423 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,4 +1,4 @@ --require ts-node/register --require source-map-support/register --recursive ---timeout 4000 +--timeout 10000 diff --git a/test/typescript/test.ts b/test/typescript/test.ts index a64fca825..de174327c 100644 --- a/test/typescript/test.ts +++ b/test/typescript/test.ts @@ -4,7 +4,7 @@ import { check, checkDirectory } from 'typings-tester'; describe('typescript typings tests', () => { it('should allow WebClient to work without a token', () => { check([`${__dirname}/sources/webclient-no-token.ts`], `${__dirname}/tsconfig-strict.json`); - }).timeout(10000); + }); it('should export method argument types and enforce strictness in the right ways', () => { check([`${__dirname}/sources/method-argument-types.ts`], `${__dirname}/tsconfig-strict.json`); From 7c89cac23ee4e70ae35269a23ab5c23e492b4376 Mon Sep 17 00:00:00 2001 From: Anton Kharitonov Date: Tue, 20 Mar 2018 14:37:40 +0100 Subject: [PATCH 24/24] remove check for options in file attribute, remove unit test --- src/WebClient.spec.js | 34 ++++++++-------------------------- src/WebClient.ts | 18 +++++++++--------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/src/WebClient.spec.js b/src/WebClient.spec.js index c20fa45ec..9ca3c34a5 100644 --- a/src/WebClient.spec.js +++ b/src/WebClient.spec.js @@ -207,7 +207,7 @@ describe('WebClient', function () { // intentially vague about the method name return this.client.apiCall('upload', { file: imageBuffer, - filename: 'train.png', + filename: 'train.jpg', }) .then((parts) => { assert.lengthOf(parts.files, 1); @@ -217,38 +217,20 @@ describe('WebClient', function () { }); }); - it('should properly serialize when the file is an object with value as a Buffer and options containing filename', function () { - const imageBuffer = fs.readFileSync(path.resolve('test', 'fixtures', 'train.jpg')); - - // intentially vague about the method name - return this.client.apiCall('upload', { - file: { value: imageBuffer, options: { filename: 'train.jpg' } }, - filename: 'train.jpg', - }) - .then((parts) => { - assert.lengthOf(parts.files, 1); - const file = parts.files[0]; - assert.include(file, { fieldname: 'file', filename: 'train.jpg' }); - // TODO: understand why this assertion was failing. already employed the buffer metadata workaround, should - // look into the details about whether that workaround is still required, or why else the `source.on` is not - // defined error would occur, or if Slack just doesn't need a filename for the part - // NOTE: it seems the file and its filename are emitted as a field in addition to the token, not sure if - // this was happening in the old implementation. - }); - }); - // Reactivate this test once we find out if the workaround in the test case before is necessary - it.skip('should log a warning when file is a Buffer and there is no filename', function () { + it('should log a warning when file is a Buffer and there is no filename', function () { const imageBuffer = fs.readFileSync(path.resolve('test', 'fixtures', 'train.jpg')); - this.capture = new CaptureStdout(); - this.capture.startCapture(); + const output = []; + const stub = function (level, message) { + output.push([level, message]); + } + const debuggingClient = new WebClient(token, { logLevel: LogLevel.WARN, logger: stub }); // intentially vague about the method name - return this.client.apiCall('upload', { + return debuggingClient.apiCall('upload', { file: imageBuffer, }) .then(() => { - const output = this.capture.getCapturedText(); assert.isNotEmpty(output); const anyLogLineIsLevelWarn = output.reduce((acc, line) => { return acc || (line.indexOf('warn') !== -1) diff --git a/src/WebClient.ts b/src/WebClient.ts index 5326bb989..130b9283d 100644 --- a/src/WebClient.ts +++ b/src/WebClient.ts @@ -517,16 +517,16 @@ export class WebClient extends EventEmitter { // // This could also be resolved by making the above condition a type guard for FilesUploadArguments. Let's expore // this solution when all the arguments in `./methods.ts` are more fully defined. + // @ts-ignore - // if (Buffer.isBuffer((options as WebAPICallOptions).file)) { - // if (!('filename' in options)) { - // this.logger.warn('`file` option is a Buffer, but there is no `filename` option. this upload will likely ' + - // 'fail. add the `filename` option to fix.'); - // } - - // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves - // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 - if (options['file'] && !options['file'].value) { + if (Buffer.isBuffer((options as WebAPICallOptions).file)) { + if (!('filename' in options)) { + this.logger.warn('`file` option is a Buffer, but there is no `filename` option. this upload will likely ' + + 'fail. add the `filename` option to fix.'); + } + + // Buffers are sometimes not handled well by the underlying `form-data` package. Adding extra metadata resolves + // that issue. See: https://github.com/slackapi/node-slack-sdk/issues/307#issuecomment-289231737 options['file'] = { value: options['file'], options: {