This is an automated email from the ASF dual-hosted git repository. ovilia pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-echarts-bot.git
commit c2db0ff40e4a97bf80381477e4038ed91f008c12 Author: Ovilia <[email protected]> AuthorDate: Tue Nov 20 14:00:21 2018 +0800 feat: 🎸 close issue, comment, add labels --- README.md | 15 +- index.js | 47 ++ jest.config.js | 8 - package-lock.json | 847 ++++++++++++---------------------- package.json | 43 +- src/index.ts | 15 - src/issue.js | 157 +++++++ test/fixtures/issues.opened.mine.json | 237 ++++++++++ test/index.test.js | 46 ++ test/index.test.ts | 52 --- travis.yml | 6 + tsconfig.json | 25 - 12 files changed, 805 insertions(+), 693 deletions(-) diff --git a/README.md b/README.md index 7fdaca7..85124c5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # echarts-robot -> A GitHub App built with [Probot](https://github.com/probot/probot) that ECharts Robot +A robot for ECharts issues. ## Setup @@ -8,19 +8,6 @@ # Install dependencies npm install -# Run typescript -npm run build - # Run the bot npm start ``` - -## Contributing - -If you have suggestions for how echarts-robot could be improved, or want to report a bug, open an issue! We'd love all and any contributions. - -For more, check out the [Contributing Guide](CONTRIBUTING.md). - -## License - -[Apache 2.0](LICENSE) © 2018 Ovilia <[email protected]> diff --git a/index.js b/index.js new file mode 100644 index 0000000..0d42caa --- /dev/null +++ b/index.js @@ -0,0 +1,47 @@ +const Issue = require('./src/issue'); + +module.exports = app => { + app.on(['issues.opened', 'issues.edited'], async context => { + const issue = new Issue(context); + + if (!issue.isUsingTemplate()) { + // Close issue + const comment = context.github.issues.createComment(context.issue({ + body: issue.response + })); + + const close = context.github.issues.edit(context.issue({ + state: 'closed' + })); + + return Promise.all([comment, close]); + } + else { + const addLabels = issue.tags.length + ? context.github.issues.addLabels(context.issue({ + labels: issue.tags + })) + : Promise.resolve(); + + const removeLabels = issue.isMeetAllRequires() + ? context.github.issues.deleteLabel(context.issue({ + name: 'waiting-for-author' + })) + : context.github.issues.deleteLabel(context.issue({ + name: 'waiting-for-help' + })); + removeLabels.catch(err => { + // Ignore error caused by not existing. + if (err.message !== 'Not Found') { + throw(err); + } + }); + + const comment = context.github.issues.createComment(context.issue({ + body: issue.response + })); + + return Promise.all([addLabels, removeLabels, comment]); + } + }); +} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 0edf48c..0000000 --- a/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - roots: ['<rootDir>/src/', '<rootDir>/test/'], - transform: { - '^.+\\.tsx?$': 'ts-jest' - }, - testRegex: '(/__tests__/.*|\\.(test|spec))\\.[tj]sx?$', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'] -} diff --git a/package-lock.json b/package-lock.json index 6854b11..7310a08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,16 +46,6 @@ "node-fetch": "^2.1.1", "universal-user-agent": "^2.0.0", "url-template": "^2.0.8" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } } }, "@octokit/webhooks": { @@ -65,27 +55,18 @@ "requires": { "buffer-equal-constant-time": "^1.0.1", "debug": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + } } }, - "@types/jest": { - "version": "23.3.9", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.9.tgz", - "integrity": "sha512-wNMwXSUcwyYajtbayfPp55tSayuDVU6PfY5gzvRSj80UvxdXEJOVPnUVajaOp7NgXLm+1e2ZDLULmpsU9vDvQw==", - "dev": true - }, - "@types/nock": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@types/nock/-/nock-9.3.0.tgz", - "integrity": "sha512-ZHf/X8rTQ5Tb1rHjxIJYqm55uO265agE3G7NoSXVa2ep+EcJXgB2fsme+zBvK7MhrxTwkC/xkB6THyv50u0MGw==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "10.12.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.5.tgz", - "integrity": "sha512-GzdHjq3t3eGLMv92Al90Iq+EoLL+86mPfQhuglbBFO7HiLdC/rkt+zrzJJumAiBF6nsrBWhou22rPW663AAyFw==" - }, "@types/supports-color": { "version": "5.3.0", "resolved": "http://registry.npmjs.org/@types/supports-color/-/supports-color-5.3.0.tgz", @@ -154,9 +135,9 @@ } }, "acorn-walk": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz", - "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "dev": true }, "agent-base": { @@ -590,21 +571,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -645,7 +611,8 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -832,13 +799,13 @@ } }, "babel-jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", - "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", + "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", "dev": true, "requires": { - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.2.0" + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.4.4" } }, "babel-messages": { @@ -863,9 +830,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", + "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", "dev": true }, "babel-plugin-syntax-object-rest-spread": { @@ -875,12 +842,12 @@ "dev": true }, "babel-preset-jest": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", - "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", + "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-jest-hoist": "^22.4.4", "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, @@ -897,6 +864,23 @@ "lodash": "^4.17.4", "mkdirp": "^0.5.1", "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } } }, "babel-runtime": { @@ -1178,15 +1162,6 @@ } } }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, "bser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", @@ -1350,6 +1325,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -1378,7 +1354,8 @@ "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true }, "chokidar": { "version": "2.0.4", @@ -1828,9 +1805,9 @@ } }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { "ms": "^2.1.1" } @@ -1856,6 +1833,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, "requires": { "type-detect": "^4.0.0" } @@ -1863,7 +1841,8 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true }, "deep-extend": { "version": "0.6.0", @@ -1997,20 +1976,6 @@ } } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2602,15 +2567,6 @@ "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", "dev": true }, - "eslint-plugin-typescript": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-typescript/-/eslint-plugin-typescript-0.12.0.tgz", - "integrity": "sha512-2+DNE8nTvdNkhem/FBJXLPSeMDOZL68vHHNfTbM+PBc5iAuwBe8xLSQubwKxABqSZDwUHg+mwGmv5c2NlImi0Q==", - "dev": true, - "requires": { - "requireindex": "~1.1.0" - } - }, "espree": { "version": "3.5.4", "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz", @@ -2751,17 +2707,17 @@ } }, "expect": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", - "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", "dev": true, "requires": { "ansi-styles": "^3.2.0", - "jest-diff": "^23.6.0", - "jest-get-type": "^22.1.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0" + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" } }, "express": { @@ -2999,15 +2955,40 @@ } }, "flat-cache": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", - "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "requires": { "circular-json": "^0.3.1", - "del": "^3.0.0", "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", "write": "^0.2.1" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + } } }, "flatmap-stream": { @@ -3652,7 +3633,8 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true }, "get-stdin": { "version": "5.0.1", @@ -3685,6 +3667,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "optional": true, "requires": { "inflight": "^1.0.4", "inherits": "2", @@ -3727,41 +3710,6 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "got": { "version": "6.7.1", "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -3995,16 +3943,6 @@ "requires": { "agent-base": "^4.1.0", "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } } }, "iconv-lite": { @@ -4384,21 +4322,6 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -4632,15 +4555,6 @@ "source-map": "^0.5.3" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -4682,13 +4596,13 @@ } }, "jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", - "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.4.tgz", + "integrity": "sha512-eBhhW8OS/UuX3HxgzNBSVEVhSuRDh39Z1kdYkQVWna+scpgsrD7vSeBI7tmEvsguPDMnfJodW28YBnhv/BzSew==", "dev": true, "requires": { "import-local": "^1.0.0", - "jest-cli": "^23.6.0" + "jest-cli": "^22.4.4" }, "dependencies": { "cliui": { @@ -4717,9 +4631,9 @@ } }, "jest-cli": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", - "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz", + "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -4729,35 +4643,33 @@ "graceful-fs": "^4.1.11", "import-local": "^1.0.0", "is-ci": "^1.0.10", - "istanbul-api": "^1.3.1", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-source-maps": "^1.2.4", - "jest-changed-files": "^23.4.2", - "jest-config": "^23.6.0", - "jest-environment-jsdom": "^23.4.0", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.2.0", + "jest-config": "^22.4.4", + "jest-environment-jsdom": "^22.4.1", "jest-get-type": "^22.1.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve-dependencies": "^23.6.0", - "jest-runner": "^23.6.0", - "jest-runtime": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "jest-watcher": "^23.4.0", - "jest-worker": "^23.2.0", + "jest-haste-map": "^22.4.2", + "jest-message-util": "^22.4.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.4.4", + "jest-runtime": "^22.4.4", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "jest-worker": "^22.2.2", "micromatch": "^2.3.11", "node-notifier": "^5.2.1", - "prompts": "^0.1.9", "realpath-native": "^1.0.0", "rimraf": "^2.5.4", "slash": "^1.0.0", "string-length": "^2.0.0", "strip-ansi": "^4.0.0", "which": "^1.2.12", - "yargs": "^11.0.0" + "yargs": "^10.0.3" } }, "rimraf": { @@ -4770,9 +4682,9 @@ } }, "yargs": { - "version": "11.1.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { "cliui": "^4.0.0", @@ -4786,40 +4698,37 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "yargs-parser": "^8.1.0" } } } }, "jest-changed-files": { - "version": "23.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", - "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", "dev": true, "requires": { "throat": "^4.0.0" } }, "jest-config": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", - "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", + "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", "dev": true, "requires": { - "babel-core": "^6.0.0", - "babel-jest": "^23.6.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^23.4.0", - "jest-environment-node": "^23.4.0", + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1", "jest-get-type": "^22.1.0", - "jest-jasmine2": "^23.6.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "micromatch": "^2.3.11", - "pretty-format": "^23.6.0" + "jest-jasmine2": "^22.4.4", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "pretty-format": "^22.4.0" }, "dependencies": { "glob": { @@ -4839,55 +4748,45 @@ } }, "jest-diff": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", - "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "dev": true, "requires": { "chalk": "^2.0.1", "diff": "^3.2.0", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-docblock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", - "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, - "jest-each": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", - "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "pretty-format": "^23.6.0" - } - }, "jest-environment-jsdom": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", - "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "dev": true, "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0", + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", - "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "dev": true, "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" } }, "jest-get-type": { @@ -4897,65 +4796,63 @@ "dev": true }, "jest-haste-map": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", - "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", "dev": true, "requires": { "fb-watchman": "^2.0.0", "graceful-fs": "^4.1.11", - "invariant": "^2.2.4", - "jest-docblock": "^23.2.0", - "jest-serializer": "^23.0.1", - "jest-worker": "^23.2.0", + "jest-docblock": "^22.4.3", + "jest-serializer": "^22.4.3", + "jest-worker": "^22.4.3", "micromatch": "^2.3.11", "sane": "^2.0.0" } }, "jest-jasmine2": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", - "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", + "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", "dev": true, "requires": { - "babel-traverse": "^6.0.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^23.6.0", + "expect": "^22.4.0", + "graceful-fs": "^4.1.11", "is-generator-fn": "^1.0.0", - "jest-diff": "^23.6.0", - "jest-each": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "pretty-format": "^23.6.0" + "jest-diff": "^22.4.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "source-map-support": "^0.5.0" } }, "jest-leak-detector": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", - "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", + "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", "dev": true, "requires": { - "pretty-format": "^23.6.0" + "pretty-format": "^22.4.3" } }, "jest-matcher-utils": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", - "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-message-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", - "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0-beta.35", @@ -4966,104 +4863,81 @@ } }, "jest-mock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", - "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", "dev": true }, "jest-regex-util": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", - "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", "dev": true }, "jest-resolve": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", - "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "dev": true, "requires": { - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "realpath-native": "^1.0.0" + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" } }, "jest-resolve-dependencies": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", - "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", "dev": true, "requires": { - "jest-regex-util": "^23.3.0", - "jest-snapshot": "^23.6.0" + "jest-regex-util": "^22.4.3" } }, "jest-runner": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", - "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz", + "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==", "dev": true, "requires": { "exit": "^0.1.2", - "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-docblock": "^23.2.0", - "jest-haste-map": "^23.6.0", - "jest-jasmine2": "^23.6.0", - "jest-leak-detector": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-runtime": "^23.6.0", - "jest-util": "^23.4.0", - "jest-worker": "^23.2.0", - "source-map-support": "^0.5.6", + "jest-config": "^22.4.4", + "jest-docblock": "^22.4.0", + "jest-haste-map": "^22.4.2", + "jest-jasmine2": "^22.4.4", + "jest-leak-detector": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-runtime": "^22.4.4", + "jest-util": "^22.4.1", + "jest-worker": "^22.2.2", "throat": "^4.0.0" - }, - "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 - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } } }, "jest-runtime": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", - "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz", + "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==", "dev": true, "requires": { "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^4.1.6", + "babel-jest": "^22.4.4", + "babel-plugin-istanbul": "^4.1.5", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", + "jest-config": "^22.4.4", + "jest-haste-map": "^22.4.2", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "json-stable-stringify": "^1.0.1", "micromatch": "^2.3.11", "realpath-native": "^1.0.0", "slash": "^1.0.0", "strip-bom": "3.0.0", "write-file-atomic": "^2.1.0", - "yargs": "^11.0.0" + "yargs": "^10.0.3" }, "dependencies": { "cliui": { @@ -5078,9 +4952,9 @@ } }, "yargs": { - "version": "11.1.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { "cliui": "^4.0.0", @@ -5094,48 +4968,43 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "yargs-parser": "^8.1.0" } } } }, "jest-serializer": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", - "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", + "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", "dev": true }, "jest-snapshot": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", - "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "dev": true, "requires": { - "babel-types": "^6.0.0", "chalk": "^2.0.1", - "jest-diff": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-resolve": "^23.6.0", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^23.6.0", - "semver": "^5.5.0" + "pretty-format": "^22.4.3" } }, "jest-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", - "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "dev": true, "requires": { "callsites": "^2.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.11", "is-ci": "^1.0.10", - "jest-message-util": "^23.4.0", + "jest-message-util": "^22.4.3", "mkdirp": "^0.5.1", - "slash": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { @@ -5148,32 +5017,22 @@ } }, "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", + "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", "dev": true, "requires": { "chalk": "^2.0.1", + "jest-config": "^22.4.4", "jest-get-type": "^22.1.0", "leven": "^2.1.0", - "pretty-format": "^23.6.0" - } - }, - "jest-watcher": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", - "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "string-length": "^2.0.0" + "pretty-format": "^22.4.0" } }, "jest-worker": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", - "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", "dev": true, "requires": { "merge-stream": "^1.0.1" @@ -5269,7 +5128,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "0.5.1", @@ -5290,9 +5150,9 @@ "dev": true }, "jsonwebtoken": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", - "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", + "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", "requires": { "jws": "^3.1.5", "lodash.includes": "^4.3.0", @@ -5350,12 +5210,6 @@ "is-buffer": "^1.1.5" } }, - "kleur": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", - "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", - "dev": true - }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", @@ -5485,12 +5339,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -5534,12 +5382,6 @@ "pify": "^3.0.0" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -5842,6 +5684,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.2.tgz", "integrity": "sha512-uWrdlRzG28SXM5yqYsUHfYBRqljF8P6aTRDh6Y5kTgs/Q4GB59QWlpiegmDHQouvmX/rDyKkC/nk+k4nA+QPNw==", + "dev": true, "requires": { "chai": "^4.1.2", "debug": "^4.1.0", @@ -5852,12 +5695,23 @@ "propagate": "^1.0.0", "qs": "^6.5.1", "semver": "^5.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "node-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.1.tgz", - "integrity": "sha512-ObXBpNCD3A/vYQiQtEWl7DuqjAXjfptYFuGHLdPl5U19/6kJuZV+8uMHLrkj3wJrJoyfg4nhgyFixZdaZoAiEQ==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" }, "node-int64": { "version": "0.4.0", @@ -5893,17 +5747,6 @@ "touch": "^3.1.0", "undefsafe": "^2.0.2", "update-notifier": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "nopt": { @@ -6192,12 +6035,6 @@ "p-limit": "^1.1.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -6313,7 +6150,8 @@ "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true }, "pause-stream": { "version": "0.0.11", @@ -6454,9 +6292,9 @@ "dev": true }, "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "version": "22.4.3", + "resolved": "http://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "dev": true, "requires": { "ansi-regex": "^3.0.0", @@ -6526,20 +6364,11 @@ "resolved": "https://registry.npmjs.org/promise-events/-/promise-events-0.1.4.tgz", "integrity": "sha1-PIj66X5EjaaPf88Z1O4wjW5DLVs=" }, - "prompts": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", - "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", - "dev": true, - "requires": { - "kleur": "^2.0.1", - "sisteransi": "^0.1.1" - } - }, "propagate": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", - "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=" + "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", + "dev": true }, "proxy-addr": { "version": "2.0.4", @@ -7255,12 +7084,6 @@ } } }, - "requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", - "dev": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -7325,6 +7148,7 @@ "version": "2.4.5", "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "optional": true, "requires": { "glob": "^6.0.1" } @@ -7849,12 +7673,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "sisteransi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", - "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", - "dev": true - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -8031,18 +7849,19 @@ } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "source-map": "^0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -8131,9 +7950,9 @@ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, "standard": { @@ -8294,17 +8113,6 @@ "mime": "^1.4.1", "qs": "^6.5.1", "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "supports-color": { @@ -8522,54 +8330,6 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "ts-jest": { - "version": "23.10.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.10.4.tgz", - "integrity": "sha512-oV/wBwGUS7olSk/9yWMiSIJWbz5xO4zhftnY3gwv6s4SMg6WHF1m8XZNBvQOKQRiTAexZ9754Z13dxBq3Zgssw==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "make-error": "1.x", - "mkdirp": "0.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -8597,7 +8357,8 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-is": { "version": "1.6.16", @@ -8614,30 +8375,6 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "typescript-eslint-parser": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-18.0.0.tgz", - "integrity": "sha512-Pn/A/Cw9ysiXSX5U1xjBmPQlxtWGV2o7jDNiH/u7KgBO2yC/y37wNFl2ogSrGZBQFuglLzGq0Xl0Bt31Jv44oA==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -9194,9 +8931,9 @@ } }, "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { "camelcase": "^4.1.0" diff --git a/package.json b/package.json index a2f4c58..0ceb77e 100644 --- a/package.json +++ b/package.json @@ -2,51 +2,46 @@ "name": "echarts-robot", "version": "1.0.0", "description": "ECharts Robot", - "author": "Ovilia <[email protected]>", - "license": "ISC", - "repository": "https://github.com//echarts-robot.git", - "homepage": "https://github.com//echarts-robot", - "bugs": "https://github.com//echarts-robot/issues", + "author": "Ovilia <[email protected]> (https://github.com/settings/apps/echarts-robot-dev)", + "license": "Apache 2.0", + "repository": "https://github.com/Ovilia/echarts-robot", + "homepage": "https://github.com/Ovilia/echarts-robot", + "bugs": "https://github.com/Ovilia/echarts-robot/issues", "keywords": [ "probot", "github", "probot-app" ], "scripts": { - "build": "tsc -p tsconfig.json", - "dev": "nodemon --exec \"npm start\"", - "start": "probot run ./lib/index.js", - "lint": "standard **/*.ts --fix", - "test": "jest && standard **/*.ts", + "dev": "nodemon", + "start": "probot run ./index.js", + "lint": "standard --fix", + "test": "jest && standard", "test:watch": "jest --watch --notify --notifyMode=change --coverage" }, "dependencies": { - "nock": "^10.0.0", - "@types/nock": "^9.3.0", "probot": "^7.2.0" }, "devDependencies": { - "@types/jest": "^23.1.5", - "@types/node": "^10.5.2", - "eslint-plugin-typescript": "^0.12.0", - "jest": "^23.4.0", + "jest": "^22.4.3", + "nock": "^10.0.0", "nodemon": "^1.17.2", "smee-client": "^1.0.2", - "standard": "^10.0.3", - "ts-jest": "^23.0.0", - "typescript": "^2.9.2", - "typescript-eslint-parser": "^18.0.0" + "standard": "^10.0.3" }, "engines": { "node": ">= 8.3.0" }, "standard": { - "parser": "typescript-eslint-parser", "env": [ "jest" - ], - "plugins": [ - "typescript" + ] + }, + "nodemonConfig": { + "exec": "npm start", + "watch": [ + ".env", + "." ] }, "jest": { diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index b0c5368..0000000 --- a/src/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Application } from 'probot' // eslint-disable-line no-unused-vars - -export = (app: Application) => { - app.on('issues.opened', async context => { - const issueComment = context.issue({ - body: 'Thanks for opening this issue!' - }); - await context.github.issues.createComment(issueComment) - }); - // For more information on building apps: - // https://probot.github.io/docs/ - - // To get your app running against GitHub, see: - // https://probot.github.io/docs/development/ -} diff --git a/src/issue.js b/src/issue.js new file mode 100644 index 0000000..a8be8f8 --- /dev/null +++ b/src/issue.js @@ -0,0 +1,157 @@ +class Issue { + constructor(context) { + this.context = context; + this.issue = context.payload.issue; + this.body = this.issue.body; + + if (this.isUsingTemplate()) { + this.init(); + } + else { + this.response = `💔 Oops... Please follow the issue template to ask questions. + I'm going to close this issue, and please create a new issue and DO NOT DELETE ISSUE TEMPLATE.`; + } + } + + init() { + this.isInEnglish = this._matches('I am using English in this issue'); + + this.issueType = 'others'; + if (this._matches('I have a question to ask about')) { + this.issueType = 'support'; + } + else if (this._matches('I have a bug to report')) { + this.issueType = 'bug'; + } + else if (this._matches('I have a feature to request')) { + this.issueType = 'new-feature'; + } + else if (this._matches('I have a feature to enhance')) { + this.issueType = 'enhancement'; + } + else if (this._matches('There\'s something wrong with the documents')) { + this.issueType = 'doc'; + } + + this.requiredReadDoc = this._matches('I have read the document'); + this.requiredSearch = this._matches('I have searched for similar issues'); + this.requiredLatest = this._matches('I have tried with the latest version'); + this.requiredIssueType = this._matches('issue type'); + this.requiredDesc = this._matches('one sentence description in issue details'); + this.requiredDemo = this._matches('demo if this is bug report') + || this.issueType !== 'bug' && this.issueType !== 'support'; + this.requiredVersion = this._matches('ECharts version'); + + this._computeResponse(); + this._computeTags(); + } + + isUsingTemplate() { + return this.body.indexOf('I have read the document') > -1; + } + + isMeetAllRequires() { + return this.requiredReadDoc && this.requiredSearch && this.requiredLatest + && this.requiredIssueType && this.requiredDesc + && this.requiredDemo && this.requiredVersion; + } + + _computeResponse() { + let response = ''; + + if (this.isMeetAllRequires()) { + switch(this.context.payload.action) { + case 'opened': + response = 'Hi! We\'ve received your issue and the expected respond time is within one day for weekdays. Have a nice day! 🍵'; + break; + case 'edited': + response = 'Thanks for editing. Please wait for the community to reply. 🍻' + } + } + else { + response += 'Thanks for editing, but something doesn\'t seem to be right:\n❗️ **[Error]** Please '; + + if (!this.requiredReadDoc) { + response += 'read the [doc](https://echarts.apache.org/option.html) and [examples](https://ecomfe.github.io/echarts-examples/public/index.html)'; + } + else if (!this.requiredSearch) { + response += '**search issue list**'; + } + else if (!this.requiredLatest) { + response += 'try with the **lastest version** of ECharts'; + } + else if (!this.requiredIssueType) { + response += 'provide with **issue type**'; + } + else if (!this.requiredDesc) { + response += 'provide with **issue description**'; + } + else if (!this.requiredDemo) { + response += 'provide with a **demo** (place N/A for demo if your problem does not need one and check the tick of demo)'; + } + else if (!this.requiredVersion) { + response += 'provide with ECharts **version**'; + } + + response += ' first, and make sure everything is checked in the `REQUIRED FIELDS`.\nYou may edit this issue and I will check it again. 😃'; + } + + this.response = response; + } + + _computeTags() { + this.tags = []; + + if (this.isMeetAllRequires()) { + this.tags.push('waiting-for-help'); + } + else { + this.tags.push('waiting-for-author'); + } + + if (this.isInEnglish) { + this.tags.push('en'); + } + + if (this.issueType !== 'others') { + this.tags.push(this.issueType); + } + + const topics = this._getTopics(); + for (let i = 0; i < topics.length; ++i) { + this.tags.push(topics[i]); + } + } + + _getTopics() { + if (this.topics) { + return this.topics; + } + else { + this.topics = []; + } + + const labels = { + 'Legend': 'legend', + 'Tooltip': 'tooltip', + 'Event': 'event', + 'Performance': 'performance', + 'SVG': 'SVG', + 'Map': 'map', + 'ECharts GL': 'gl', + 'Third-party': 'third-party' + }; + for (let label in labels) { + if (this._matches(label)) { + this.topics.push(labels[label]); + } + } + return this.topics; + } + + _matches(text) { + return this.body.indexOf('- [x] ' + text) > -1; + } +} + +module.exports = Issue; diff --git a/test/fixtures/issues.opened.mine.json b/test/fixtures/issues.opened.mine.json new file mode 100644 index 0000000..976f2b6 --- /dev/null +++ b/test/fixtures/issues.opened.mine.json @@ -0,0 +1,237 @@ +{ + "name":"issues", + "id":"836c5da0-e8b2-11e8-8d07-6968c406240b", + "payload":{ + "action":"opened", + "issue":{ + "url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/10", + "repository_url":"https://api.github.com/repos/Ovilia/echarts-robot-test", + "labels_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/10/labels{/name}", + "comments_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/10/comments", + "events_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/10/events", + "html_url":"https://github.com/Ovilia/echarts-robot-test/issues/10", + "id":381055099, + "node_id":"MDU6SXNzdWUzODEwNTUwOTk=", + "number":10, + "title":"10", + "user":{ + "login":"Ovilia", + "id":779050, + "node_id":"MDQ6VXNlcjc3OTA1MA==", + "avatar_url":"https://avatars3.githubusercontent.com/u/779050?v=4", + "gravatar_id":"", + "url":"https://api.github.com/users/Ovilia", + "html_url":"https://github.com/Ovilia", + "followers_url":"https://api.github.com/users/Ovilia/followers", + "following_url":"https://api.github.com/users/Ovilia/following{/other_user}", + "gists_url":"https://api.github.com/users/Ovilia/gists{/gist_id}", + "starred_url":"https://api.github.com/users/Ovilia/starred{/owner}{/repo}", + "subscriptions_url":"https://api.github.com/users/Ovilia/subscriptions", + "organizations_url":"https://api.github.com/users/Ovilia/orgs", + "repos_url":"https://api.github.com/users/Ovilia/repos", + "events_url":"https://api.github.com/users/Ovilia/events{/privacy}", + "received_events_url":"https://api.github.com/users/Ovilia/received_events", + "type":"User", + "site_admin":false + }, + "labels":[ + + ], + "state":"open", + "locked":false, + "assignee":null, + "assignees":[ + + ], + "milestone":null, + "comments":0, + "created_at":"2018-11-15T08:43:23Z", + "updated_at":"2018-11-15T08:43:23Z", + "closed_at":null, + "author_association":"OWNER", + "body":"<!--\r\nThanks for choosing ECharts!\r\n感谢使用 ECharts!\r\n\r\nIt's highly recommended to use English in issues, to help others having the same problem in the future.\r\n加入 Apache 开源基金会后,我们有了更多国外的用户。为了方便社区用户,强烈建议在 issue 中使用英文。\r\n\r\nPlease check the following questions to let our bot help.\r\n-->\r\n\r\n<!-- To check the option, add x in [], e.g.: [x] I am using English in this issue. -->\r\n\r\n- [ ] I am using English in this issue.\r\n\r\n\r\n## General Questions\r\n\r [...] + }, + "repository":{ + "id":157645139, + "node_id":"MDEwOlJlcG9zaXRvcnkxNTc2NDUxMzk=", + "name":"echarts-robot-test", + "full_name":"Ovilia/echarts-robot-test", + "private":true, + "owner":{ + "login":"Ovilia", + "id":779050, + "node_id":"MDQ6VXNlcjc3OTA1MA==", + "avatar_url":"https://avatars3.githubusercontent.com/u/779050?v=4", + "gravatar_id":"", + "url":"https://api.github.com/users/Ovilia", + "html_url":"https://github.com/Ovilia", + "followers_url":"https://api.github.com/users/Ovilia/followers", + "following_url":"https://api.github.com/users/Ovilia/following{/other_user}", + "gists_url":"https://api.github.com/users/Ovilia/gists{/gist_id}", + "starred_url":"https://api.github.com/users/Ovilia/starred{/owner}{/repo}", + "subscriptions_url":"https://api.github.com/users/Ovilia/subscriptions", + "organizations_url":"https://api.github.com/users/Ovilia/orgs", + "repos_url":"https://api.github.com/users/Ovilia/repos", + "events_url":"https://api.github.com/users/Ovilia/events{/privacy}", + "received_events_url":"https://api.github.com/users/Ovilia/received_events", + "type":"User", + "site_admin":false + }, + "html_url":"https://github.com/Ovilia/echarts-robot-test", + "description":null, + "fork":false, + "url":"https://api.github.com/repos/Ovilia/echarts-robot-test", + "forks_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/forks", + "keys_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/keys{/key_id}", + "collaborators_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/collaborators{/collaborator}", + "teams_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/teams", + "hooks_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/hooks", + "issue_events_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/events{/number}", + "events_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/events", + "assignees_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/assignees{/user}", + "branches_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/branches{/branch}", + "tags_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/tags", + "blobs_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/git/blobs{/sha}", + "git_tags_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/git/tags{/sha}", + "git_refs_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/git/refs{/sha}", + "trees_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/git/trees{/sha}", + "statuses_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/statuses/{sha}", + "languages_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/languages", + "stargazers_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/stargazers", + "contributors_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/contributors", + "subscribers_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/subscribers", + "subscription_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/subscription", + "commits_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/commits{/sha}", + "git_commits_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/git/commits{/sha}", + "comments_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/comments{/number}", + "issue_comment_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues/comments{/number}", + "contents_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/contents/{+path}", + "compare_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/compare/{base}...{head}", + "merges_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/merges", + "archive_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/{archive_format}{/ref}", + "downloads_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/downloads", + "issues_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/issues{/number}", + "pulls_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/pulls{/number}", + "milestones_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/milestones{/number}", + "notifications_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/notifications{?since,all,participating}", + "labels_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/labels{/name}", + "releases_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/releases{/id}", + "deployments_url":"https://api.github.com/repos/Ovilia/echarts-robot-test/deployments", + "created_at":"2018-11-15T03:13:05Z", + "updated_at":"2018-11-15T07:57:58Z", + "pushed_at":"2018-11-15T07:57:57Z", + "git_url":"git://github.com/Ovilia/echarts-robot-test.git", + "ssh_url":"[email protected]:Ovilia/echarts-robot-test.git", + "clone_url":"https://github.com/Ovilia/echarts-robot-test.git", + "svn_url":"https://github.com/Ovilia/echarts-robot-test", + "homepage":null, + "size":0, + "stargazers_count":0, + "watchers_count":0, + "language":null, + "has_issues":true, + "has_projects":true, + "has_downloads":true, + "has_wiki":true, + "has_pages":false, + "forks_count":0, + "mirror_url":null, + "archived":false, + "open_issues_count":10, + "license":null, + "forks":0, + "open_issues":10, + "watchers":0, + "default_branch":"master" + }, + "sender":{ + "login":"Ovilia", + "id":779050, + "node_id":"MDQ6VXNlcjc3OTA1MA==", + "avatar_url":"https://avatars3.githubusercontent.com/u/779050?v=4", + "gravatar_id":"", + "url":"https://api.github.com/users/Ovilia", + "html_url":"https://github.com/Ovilia", + "followers_url":"https://api.github.com/users/Ovilia/followers", + "following_url":"https://api.github.com/users/Ovilia/following{/other_user}", + "gists_url":"https://api.github.com/users/Ovilia/gists{/gist_id}", + "starred_url":"https://api.github.com/users/Ovilia/starred{/owner}{/repo}", + "subscriptions_url":"https://api.github.com/users/Ovilia/subscriptions", + "organizations_url":"https://api.github.com/users/Ovilia/orgs", + "repos_url":"https://api.github.com/users/Ovilia/repos", + "events_url":"https://api.github.com/users/Ovilia/events{/privacy}", + "received_events_url":"https://api.github.com/users/Ovilia/received_events", + "type":"User", + "site_admin":false + }, + "installation":{ + "id":455221, + "node_id":"MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uNDU1MjIx" + } + }, + "github":{ + "activity":{ + + }, + "apps":{ + + }, + "authorization":{ + + }, + "checks":{ + + }, + "emojis":{ + + }, + "enterprise":{ + + }, + "gists":{ + + }, + "gitdata":{ + + }, + "integrations":{ + + }, + "issues":{ + + }, + "meta":{ + + }, + "migrations":{ + + }, + "misc":{ + + }, + "orgs":{ + + }, + "projects":{ + + }, + "pullRequests":{ + + }, + "reactions":{ + + }, + "repos":{ + + }, + "search":{ + + }, + "teams":{ + + }, + "users":{ + + } + } +} \ No newline at end of file diff --git a/test/index.test.js b/test/index.test.js new file mode 100644 index 0000000..027d624 --- /dev/null +++ b/test/index.test.js @@ -0,0 +1,46 @@ +const nock = require('nock') +// Requiring our app implementation +const myProbotApp = require('..') +const { Probot } = require('probot') +// Requiring our fixtures +const payload = require('./fixtures/issues.opened') +const issueCreatedBody = { body: 'Thanks for opening this issue!' } + +nock.disableNetConnect() + +describe('My Probot app', () => { + let probot + + beforeEach(() => { + probot = new Probot({}) + // Load our app into probot + const app = probot.load(myProbotApp) + + // just return a test token + app.app = () => 'test' + }) + + test('creates a comment when an issue is opened', async () => { + // Test that we correctly return a test token + nock('https://api.github.com') + .post('/app/installations/2/access_tokens') + .reply(200, { token: 'test' }) + + // Test that a comment is posted + nock('https://api.github.com') + .post('/repos/hiimbex/testing-things/issues/1/comments', (body) => { + expect(body).toMatchObject(issueCreatedBody) + return true + }) + .reply(200) + + // Receive a webhook event + await probot.receive({ name: 'issues', payload }) + }) +}) + +// For more information about testing with Jest see: +// https://facebook.github.io/jest/ + +// For more information about testing with Nock see: +// https://github.com/nock/nock diff --git a/test/index.test.ts b/test/index.test.ts deleted file mode 100644 index 247f39a..0000000 --- a/test/index.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -// You can import your modules -// import index from '../src/index' - -import nock from 'nock' -// Requiring our app implementation -import myProbotApp from '../src' -import { Probot } from 'probot' -// Requiring our fixtures -import payload from './fixtures/issues.opened.json' -const issueCreatedBody = { body: 'Thanks for opening this issue!' } - -nock.disableNetConnect() - -describe('My Probot app', () => { - let probot: any - - beforeEach(() => { - probot = new Probot({ id: 123, cert: 'test' }) - // Load our app into probot - const app = probot.load(myProbotApp) - - // just return a test token - app.app = () => 'test' - }) - - test('creates a comment when an issue is opened', async () => { - // Test that we correctly return a test token - nock('https://api.github.com') - .post('/app/installations/2/access_tokens') - .reply(200, { token: 'test' }) - - // Test that a comment is posted - nock('https://api.github.com') - .post('/repos/hiimbex/testing-things/issues/1/comments', (body: any) => { - expect(body).toMatchObject(issueCreatedBody) - return true - }) - .reply(200) - - // Receive a webhook event - await probot.receive({ name: 'issues', payload }) - }) -}) - -// For more information about testing with Jest see: -// https://facebook.github.io/jest/ - -// For more information about using TypeScript in your tests, Jest recommends: -// https://github.com/kulshekhar/ts-jest - -// For more information about testing with Nock see: -// https://github.com/nock/nock diff --git a/travis.yml b/travis.yml new file mode 100644 index 0000000..71156fd --- /dev/null +++ b/travis.yml @@ -0,0 +1,6 @@ +sudo: false +language: node_js +node_js: + - "8.3" +notifications: + disabled: true diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 56369ea..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "allowJs": false, - "lib": ["es2015", "es2017"], - "module": "commonjs", - "moduleResolution": "node", - "target": "es5", - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": false, - "pretty": true, - "strict": true, - "sourceMap": true, - "outDir": "./lib", - "skipLibCheck": true, - "noImplicitAny": true, - "esModuleInterop": true, - "declaration": true, - "resolveJsonModule": true - }, - "include": [ - "src/**/*" - ], - "compileOnSave": false -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
