├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src ├── bin.ts ├── change-user-status.ts ├── get-user-status.ts ├── index.ts └── types.ts ├── tsconfig.json └── types └── @octokit └── graphql └── index.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .DS_Store 3 | node_modules 4 | .rts2_cache_cjs 5 | .rts2_cache_esm 6 | .rts2_cache_umd 7 | dist 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

[WIP] GitHub User Status CLI

2 |

A CLI for setting your GitHub user status

3 |

NPM Build Status Codecov

4 | 5 | ## Usage 6 | 7 | You'll need to [set a GitHub personal access token](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) to `GITHUB_TOKEN`, with the `user` scope if you want to change your own status. You can also use the `-t=` flag. 8 | 9 | ### Get your own status 10 | 11 | ```sh 12 | $ npx github-user-status 13 | ``` 14 | 15 | With a GitHub personal access token: 16 | 17 | ```sh 18 | $ npx github-user-status -t 19 | ``` 20 | 21 | ### Get the status of a user 22 | 23 | ```sh 24 | $ npx github-user-status -u 25 | ``` 26 | 27 | ### Change your status 28 | 29 | ```sh 30 | $ npx github-user-status -m -e [emoji] 31 | ``` 32 | 33 | ## Programmatic Usage 34 | 35 | ```js 36 | const { getUserStatus, changeUserStatus } = require('github-user-status') 37 | 38 | // Get your own status 39 | getUserStatus(token) 40 | 41 | // Get a user's status 42 | getUserStatus(token, 'JasonEtco') 43 | 44 | // Set your status 45 | changeUserStatus( 46 | { 47 | message, // string, required 48 | emoji, // string 49 | expiresAt, // string 50 | limitedAvailability, // boolean 51 | }, 52 | token 53 | ) 54 | ``` 55 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-user-status", 3 | "version": "0.1.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.5.5", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", 10 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.5.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", 19 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "@octokit/endpoint": { 28 | "version": "5.3.2", 29 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.2.tgz", 30 | "integrity": "sha512-gRjteEM9I6f4D8vtwU2iGUTn9RX/AJ0SVXiqBUEuYEWVGGAVjSXdT0oNmghH5lvQNWs8mwt6ZaultuG6yXivNw==", 31 | "requires": { 32 | "deepmerge": "4.0.0", 33 | "is-plain-object": "^3.0.0", 34 | "universal-user-agent": "^3.0.0", 35 | "url-template": "^2.0.8" 36 | }, 37 | "dependencies": { 38 | "is-plain-object": { 39 | "version": "3.0.0", 40 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", 41 | "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", 42 | "requires": { 43 | "isobject": "^4.0.0" 44 | } 45 | }, 46 | "isobject": { 47 | "version": "4.0.0", 48 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", 49 | "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" 50 | } 51 | } 52 | }, 53 | "@octokit/graphql": { 54 | "version": "3.0.1", 55 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-3.0.1.tgz", 56 | "integrity": "sha512-TiegCo0jueDPlkpcYlx8KSYa3ybs13ePBteoJutEHou0hu8sJHHhvIaQWvDH5jj4mHfJwZwD4r6/Xbl33UHLUw==", 57 | "requires": { 58 | "@octokit/request": "^5.0.0", 59 | "universal-user-agent": "^3.0.0" 60 | } 61 | }, 62 | "@octokit/request": { 63 | "version": "5.0.2", 64 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.0.2.tgz", 65 | "integrity": "sha512-z1BQr43g4kOL4ZrIVBMHwi68Yg9VbkRUyuAgqCp1rU3vbYa69+2gIld/+gHclw15bJWQnhqqyEb7h5a5EqgZ0A==", 66 | "requires": { 67 | "@octokit/endpoint": "^5.1.0", 68 | "@octokit/request-error": "^1.0.1", 69 | "deprecation": "^2.0.0", 70 | "is-plain-object": "^3.0.0", 71 | "node-fetch": "^2.3.0", 72 | "once": "^1.4.0", 73 | "universal-user-agent": "^3.0.0" 74 | }, 75 | "dependencies": { 76 | "is-plain-object": { 77 | "version": "3.0.0", 78 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", 79 | "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", 80 | "requires": { 81 | "isobject": "^4.0.0" 82 | } 83 | }, 84 | "isobject": { 85 | "version": "4.0.0", 86 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", 87 | "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" 88 | } 89 | } 90 | }, 91 | "@octokit/request-error": { 92 | "version": "1.0.4", 93 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.4.tgz", 94 | "integrity": "sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig==", 95 | "requires": { 96 | "deprecation": "^2.0.0", 97 | "once": "^1.4.0" 98 | } 99 | }, 100 | "@types/commander": { 101 | "version": "2.12.2", 102 | "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", 103 | "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", 104 | "dev": true, 105 | "requires": { 106 | "commander": "*" 107 | } 108 | }, 109 | "@types/jest": { 110 | "version": "24.0.16", 111 | "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.16.tgz", 112 | "integrity": "sha512-JrAiyV+PPGKZzw6uxbI761cHZ0G7QMOHXPhtSpcl08rZH6CswXaaejckn3goFKmF7M3nzEoJ0lwYCbqLMmjziQ==", 113 | "dev": true, 114 | "requires": { 115 | "@types/jest-diff": "*" 116 | } 117 | }, 118 | "@types/jest-diff": { 119 | "version": "20.0.1", 120 | "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", 121 | "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", 122 | "dev": true 123 | }, 124 | "@types/node": { 125 | "version": "12.6.9", 126 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.9.tgz", 127 | "integrity": "sha512-+YB9FtyxXGyD54p8rXwWaN1EWEyar5L58GlGWgtH2I9rGmLGBQcw63+0jw+ujqVavNuO47S1ByAjm9zdHMnskw==", 128 | "dev": true 129 | }, 130 | "@types/node-emoji": { 131 | "version": "1.8.1", 132 | "resolved": "https://registry.npmjs.org/@types/node-emoji/-/node-emoji-1.8.1.tgz", 133 | "integrity": "sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA==", 134 | "dev": true 135 | }, 136 | "@types/normalize-package-data": { 137 | "version": "2.4.0", 138 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 139 | "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", 140 | "dev": true 141 | }, 142 | "ansi-styles": { 143 | "version": "3.2.1", 144 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 145 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 146 | "dev": true, 147 | "requires": { 148 | "color-convert": "^1.9.0" 149 | } 150 | }, 151 | "argparse": { 152 | "version": "1.0.10", 153 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 154 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 155 | "dev": true, 156 | "requires": { 157 | "sprintf-js": "~1.0.2" 158 | } 159 | }, 160 | "array-differ": { 161 | "version": "2.1.0", 162 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", 163 | "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", 164 | "dev": true 165 | }, 166 | "array-union": { 167 | "version": "1.0.2", 168 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 169 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 170 | "dev": true, 171 | "requires": { 172 | "array-uniq": "^1.0.1" 173 | } 174 | }, 175 | "array-uniq": { 176 | "version": "1.0.3", 177 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 178 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 179 | "dev": true 180 | }, 181 | "arrify": { 182 | "version": "1.0.1", 183 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 184 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 185 | "dev": true 186 | }, 187 | "balanced-match": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 190 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 191 | "dev": true 192 | }, 193 | "brace-expansion": { 194 | "version": "1.1.11", 195 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 196 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 197 | "dev": true, 198 | "requires": { 199 | "balanced-match": "^1.0.0", 200 | "concat-map": "0.0.1" 201 | } 202 | }, 203 | "caller-callsite": { 204 | "version": "2.0.0", 205 | "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", 206 | "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", 207 | "dev": true, 208 | "requires": { 209 | "callsites": "^2.0.0" 210 | }, 211 | "dependencies": { 212 | "callsites": { 213 | "version": "2.0.0", 214 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", 215 | "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", 216 | "dev": true 217 | } 218 | } 219 | }, 220 | "caller-path": { 221 | "version": "2.0.0", 222 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", 223 | "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", 224 | "dev": true, 225 | "requires": { 226 | "caller-callsite": "^2.0.0" 227 | } 228 | }, 229 | "chalk": { 230 | "version": "2.4.2", 231 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 232 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 233 | "dev": true, 234 | "requires": { 235 | "ansi-styles": "^3.2.1", 236 | "escape-string-regexp": "^1.0.5", 237 | "supports-color": "^5.3.0" 238 | }, 239 | "dependencies": { 240 | "supports-color": { 241 | "version": "5.5.0", 242 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 243 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 244 | "dev": true, 245 | "requires": { 246 | "has-flag": "^3.0.0" 247 | } 248 | } 249 | } 250 | }, 251 | "ci-info": { 252 | "version": "2.0.0", 253 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 254 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 255 | "dev": true 256 | }, 257 | "color-convert": { 258 | "version": "1.9.3", 259 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 260 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 261 | "dev": true, 262 | "requires": { 263 | "color-name": "1.1.3" 264 | } 265 | }, 266 | "color-name": { 267 | "version": "1.1.3", 268 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 269 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 270 | "dev": true 271 | }, 272 | "commander": { 273 | "version": "2.20.0", 274 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 275 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" 276 | }, 277 | "concat-map": { 278 | "version": "0.0.1", 279 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 280 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 281 | "dev": true 282 | }, 283 | "cosmiconfig": { 284 | "version": "5.2.1", 285 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", 286 | "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", 287 | "dev": true, 288 | "requires": { 289 | "import-fresh": "^2.0.0", 290 | "is-directory": "^0.3.1", 291 | "js-yaml": "^3.13.1", 292 | "parse-json": "^4.0.0" 293 | } 294 | }, 295 | "cross-spawn": { 296 | "version": "6.0.5", 297 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 298 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 299 | "requires": { 300 | "nice-try": "^1.0.4", 301 | "path-key": "^2.0.1", 302 | "semver": "^5.5.0", 303 | "shebang-command": "^1.2.0", 304 | "which": "^1.2.9" 305 | } 306 | }, 307 | "deepmerge": { 308 | "version": "4.0.0", 309 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz", 310 | "integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==" 311 | }, 312 | "deprecation": { 313 | "version": "2.3.1", 314 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 315 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 316 | }, 317 | "end-of-stream": { 318 | "version": "1.4.1", 319 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 320 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 321 | "requires": { 322 | "once": "^1.4.0" 323 | } 324 | }, 325 | "error-ex": { 326 | "version": "1.3.2", 327 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 328 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 329 | "dev": true, 330 | "requires": { 331 | "is-arrayish": "^0.2.1" 332 | } 333 | }, 334 | "escape-string-regexp": { 335 | "version": "1.0.5", 336 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 337 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 338 | "dev": true 339 | }, 340 | "esprima": { 341 | "version": "4.0.1", 342 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 343 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 344 | "dev": true 345 | }, 346 | "esutils": { 347 | "version": "2.0.3", 348 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 349 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 350 | "dev": true 351 | }, 352 | "execa": { 353 | "version": "1.0.0", 354 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 355 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 356 | "requires": { 357 | "cross-spawn": "^6.0.0", 358 | "get-stream": "^4.0.0", 359 | "is-stream": "^1.1.0", 360 | "npm-run-path": "^2.0.0", 361 | "p-finally": "^1.0.0", 362 | "signal-exit": "^3.0.0", 363 | "strip-eof": "^1.0.0" 364 | } 365 | }, 366 | "get-stdin": { 367 | "version": "7.0.0", 368 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", 369 | "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", 370 | "dev": true 371 | }, 372 | "get-stream": { 373 | "version": "4.1.0", 374 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 375 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 376 | "requires": { 377 | "pump": "^3.0.0" 378 | } 379 | }, 380 | "has-flag": { 381 | "version": "3.0.0", 382 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 383 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 384 | "dev": true 385 | }, 386 | "hosted-git-info": { 387 | "version": "2.7.1", 388 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 389 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", 390 | "dev": true 391 | }, 392 | "husky": { 393 | "version": "3.0.2", 394 | "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.2.tgz", 395 | "integrity": "sha512-WXCtaME2x0o4PJlKY4ap8BzLA+D0zlvefqAvLCPriOOu+x0dpO5uc5tlB7CY6/0SE2EESmoZsj4jW5D09KrJoA==", 396 | "dev": true, 397 | "requires": { 398 | "chalk": "^2.4.2", 399 | "cosmiconfig": "^5.2.1", 400 | "execa": "^1.0.0", 401 | "get-stdin": "^7.0.0", 402 | "is-ci": "^2.0.0", 403 | "opencollective-postinstall": "^2.0.2", 404 | "pkg-dir": "^4.2.0", 405 | "please-upgrade-node": "^3.1.1", 406 | "read-pkg": "^5.1.1", 407 | "run-node": "^1.0.0", 408 | "slash": "^3.0.0" 409 | }, 410 | "dependencies": { 411 | "find-up": { 412 | "version": "4.1.0", 413 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 414 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 415 | "dev": true, 416 | "requires": { 417 | "locate-path": "^5.0.0", 418 | "path-exists": "^4.0.0" 419 | } 420 | }, 421 | "locate-path": { 422 | "version": "5.0.0", 423 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 424 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 425 | "dev": true, 426 | "requires": { 427 | "p-locate": "^4.1.0" 428 | } 429 | }, 430 | "p-locate": { 431 | "version": "4.1.0", 432 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 433 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 434 | "dev": true, 435 | "requires": { 436 | "p-limit": "^2.2.0" 437 | } 438 | }, 439 | "path-exists": { 440 | "version": "4.0.0", 441 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 442 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 443 | "dev": true 444 | }, 445 | "pkg-dir": { 446 | "version": "4.2.0", 447 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 448 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 449 | "dev": true, 450 | "requires": { 451 | "find-up": "^4.0.0" 452 | } 453 | }, 454 | "slash": { 455 | "version": "3.0.0", 456 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 457 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 458 | "dev": true 459 | } 460 | } 461 | }, 462 | "ignore": { 463 | "version": "3.3.10", 464 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 465 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 466 | "dev": true 467 | }, 468 | "import-fresh": { 469 | "version": "2.0.0", 470 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", 471 | "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", 472 | "dev": true, 473 | "requires": { 474 | "caller-path": "^2.0.0", 475 | "resolve-from": "^3.0.0" 476 | } 477 | }, 478 | "is-arrayish": { 479 | "version": "0.2.1", 480 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 481 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 482 | "dev": true 483 | }, 484 | "is-ci": { 485 | "version": "2.0.0", 486 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 487 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 488 | "dev": true, 489 | "requires": { 490 | "ci-info": "^2.0.0" 491 | } 492 | }, 493 | "is-directory": { 494 | "version": "0.3.1", 495 | "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", 496 | "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", 497 | "dev": true 498 | }, 499 | "is-stream": { 500 | "version": "1.1.0", 501 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 502 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 503 | }, 504 | "isexe": { 505 | "version": "2.0.0", 506 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 507 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 508 | }, 509 | "js-tokens": { 510 | "version": "4.0.0", 511 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 512 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 513 | "dev": true 514 | }, 515 | "js-yaml": { 516 | "version": "3.13.1", 517 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 518 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 519 | "dev": true, 520 | "requires": { 521 | "argparse": "^1.0.7", 522 | "esprima": "^4.0.0" 523 | } 524 | }, 525 | "json-parse-better-errors": { 526 | "version": "1.0.2", 527 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 528 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 529 | "dev": true 530 | }, 531 | "lines-and-columns": { 532 | "version": "1.1.6", 533 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 534 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", 535 | "dev": true 536 | }, 537 | "lodash.toarray": { 538 | "version": "4.4.0", 539 | "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", 540 | "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" 541 | }, 542 | "macos-release": { 543 | "version": "2.3.0", 544 | "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", 545 | "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" 546 | }, 547 | "minimatch": { 548 | "version": "3.0.4", 549 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 550 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 551 | "dev": true, 552 | "requires": { 553 | "brace-expansion": "^1.1.7" 554 | } 555 | }, 556 | "mri": { 557 | "version": "1.1.4", 558 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", 559 | "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", 560 | "dev": true 561 | }, 562 | "multimatch": { 563 | "version": "3.0.0", 564 | "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", 565 | "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", 566 | "dev": true, 567 | "requires": { 568 | "array-differ": "^2.0.3", 569 | "array-union": "^1.0.2", 570 | "arrify": "^1.0.1", 571 | "minimatch": "^3.0.4" 572 | } 573 | }, 574 | "nice-try": { 575 | "version": "1.0.5", 576 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 577 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 578 | }, 579 | "node-emoji": { 580 | "version": "1.10.0", 581 | "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", 582 | "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", 583 | "requires": { 584 | "lodash.toarray": "^4.4.0" 585 | } 586 | }, 587 | "node-fetch": { 588 | "version": "2.6.0", 589 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", 590 | "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" 591 | }, 592 | "normalize-package-data": { 593 | "version": "2.5.0", 594 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 595 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 596 | "dev": true, 597 | "requires": { 598 | "hosted-git-info": "^2.1.4", 599 | "resolve": "^1.10.0", 600 | "semver": "2 || 3 || 4 || 5", 601 | "validate-npm-package-license": "^3.0.1" 602 | } 603 | }, 604 | "npm-run-path": { 605 | "version": "2.0.2", 606 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 607 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 608 | "requires": { 609 | "path-key": "^2.0.0" 610 | } 611 | }, 612 | "once": { 613 | "version": "1.4.0", 614 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 615 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 616 | "requires": { 617 | "wrappy": "1" 618 | } 619 | }, 620 | "opencollective-postinstall": { 621 | "version": "2.0.2", 622 | "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", 623 | "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", 624 | "dev": true 625 | }, 626 | "os-name": { 627 | "version": "3.1.0", 628 | "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", 629 | "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", 630 | "requires": { 631 | "macos-release": "^2.2.0", 632 | "windows-release": "^3.1.0" 633 | } 634 | }, 635 | "p-finally": { 636 | "version": "1.0.0", 637 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 638 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 639 | }, 640 | "p-limit": { 641 | "version": "2.2.0", 642 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 643 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 644 | "dev": true, 645 | "requires": { 646 | "p-try": "^2.0.0" 647 | } 648 | }, 649 | "p-try": { 650 | "version": "2.2.0", 651 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 652 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 653 | "dev": true 654 | }, 655 | "parse-json": { 656 | "version": "4.0.0", 657 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 658 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 659 | "dev": true, 660 | "requires": { 661 | "error-ex": "^1.3.1", 662 | "json-parse-better-errors": "^1.0.1" 663 | } 664 | }, 665 | "path-exists": { 666 | "version": "3.0.0", 667 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 668 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 669 | "dev": true 670 | }, 671 | "path-key": { 672 | "version": "2.0.1", 673 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 674 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 675 | }, 676 | "path-parse": { 677 | "version": "1.0.6", 678 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 679 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 680 | "dev": true 681 | }, 682 | "please-upgrade-node": { 683 | "version": "3.1.1", 684 | "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", 685 | "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", 686 | "dev": true, 687 | "requires": { 688 | "semver-compare": "^1.0.0" 689 | } 690 | }, 691 | "prettier": { 692 | "version": "1.18.2", 693 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", 694 | "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", 695 | "dev": true 696 | }, 697 | "pretty-quick": { 698 | "version": "1.11.1", 699 | "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.11.1.tgz", 700 | "integrity": "sha512-kSXCkcETfak7EQXz6WOkCeCqpbC4GIzrN/vaneTGMP/fAtD8NerA9bPhCUqHAks1geo7biZNl5uEMPceeneLuA==", 701 | "dev": true, 702 | "requires": { 703 | "chalk": "^2.3.0", 704 | "execa": "^0.8.0", 705 | "find-up": "^2.1.0", 706 | "ignore": "^3.3.7", 707 | "mri": "^1.1.0", 708 | "multimatch": "^3.0.0" 709 | }, 710 | "dependencies": { 711 | "cross-spawn": { 712 | "version": "5.1.0", 713 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 714 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 715 | "dev": true, 716 | "requires": { 717 | "lru-cache": "^4.0.1", 718 | "shebang-command": "^1.2.0", 719 | "which": "^1.2.9" 720 | }, 721 | "dependencies": { 722 | "lru-cache": { 723 | "version": "4.1.5", 724 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 725 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 726 | "dev": true, 727 | "requires": { 728 | "pseudomap": "^1.0.2", 729 | "yallist": "^2.1.2" 730 | } 731 | } 732 | } 733 | }, 734 | "execa": { 735 | "version": "0.8.0", 736 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", 737 | "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", 738 | "dev": true, 739 | "requires": { 740 | "cross-spawn": "^5.0.1", 741 | "get-stream": "^3.0.0", 742 | "is-stream": "^1.1.0", 743 | "npm-run-path": "^2.0.0", 744 | "p-finally": "^1.0.0", 745 | "signal-exit": "^3.0.0", 746 | "strip-eof": "^1.0.0" 747 | } 748 | }, 749 | "find-up": { 750 | "version": "2.1.0", 751 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 752 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 753 | "dev": true, 754 | "requires": { 755 | "locate-path": "^2.0.0" 756 | } 757 | }, 758 | "get-stream": { 759 | "version": "3.0.0", 760 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 761 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 762 | "dev": true 763 | }, 764 | "locate-path": { 765 | "version": "2.0.0", 766 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 767 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 768 | "dev": true, 769 | "requires": { 770 | "p-locate": "^2.0.0", 771 | "path-exists": "^3.0.0" 772 | } 773 | }, 774 | "p-limit": { 775 | "version": "1.3.0", 776 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", 777 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", 778 | "dev": true, 779 | "requires": { 780 | "p-try": "^1.0.0" 781 | } 782 | }, 783 | "p-locate": { 784 | "version": "2.0.0", 785 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 786 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 787 | "dev": true, 788 | "requires": { 789 | "p-limit": "^1.1.0" 790 | } 791 | }, 792 | "p-try": { 793 | "version": "1.0.0", 794 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 795 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 796 | "dev": true 797 | }, 798 | "yallist": { 799 | "version": "2.1.2", 800 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 801 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 802 | "dev": true 803 | } 804 | } 805 | }, 806 | "pseudomap": { 807 | "version": "1.0.2", 808 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 809 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 810 | "dev": true 811 | }, 812 | "pump": { 813 | "version": "3.0.0", 814 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 815 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 816 | "requires": { 817 | "end-of-stream": "^1.1.0", 818 | "once": "^1.3.1" 819 | } 820 | }, 821 | "read-pkg": { 822 | "version": "5.2.0", 823 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", 824 | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", 825 | "dev": true, 826 | "requires": { 827 | "@types/normalize-package-data": "^2.4.0", 828 | "normalize-package-data": "^2.5.0", 829 | "parse-json": "^5.0.0", 830 | "type-fest": "^0.6.0" 831 | }, 832 | "dependencies": { 833 | "parse-json": { 834 | "version": "5.0.0", 835 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", 836 | "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", 837 | "dev": true, 838 | "requires": { 839 | "@babel/code-frame": "^7.0.0", 840 | "error-ex": "^1.3.1", 841 | "json-parse-better-errors": "^1.0.1", 842 | "lines-and-columns": "^1.1.6" 843 | } 844 | } 845 | } 846 | }, 847 | "resolve": { 848 | "version": "1.12.0", 849 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", 850 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", 851 | "dev": true, 852 | "requires": { 853 | "path-parse": "^1.0.6" 854 | } 855 | }, 856 | "resolve-from": { 857 | "version": "3.0.0", 858 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", 859 | "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", 860 | "dev": true 861 | }, 862 | "run-node": { 863 | "version": "1.0.0", 864 | "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", 865 | "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", 866 | "dev": true 867 | }, 868 | "semver": { 869 | "version": "5.7.0", 870 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 871 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" 872 | }, 873 | "semver-compare": { 874 | "version": "1.0.0", 875 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 876 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 877 | "dev": true 878 | }, 879 | "shebang-command": { 880 | "version": "1.2.0", 881 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 882 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 883 | "requires": { 884 | "shebang-regex": "^1.0.0" 885 | } 886 | }, 887 | "shebang-regex": { 888 | "version": "1.0.0", 889 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 890 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 891 | }, 892 | "signal-exit": { 893 | "version": "3.0.2", 894 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 895 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 896 | }, 897 | "spdx-correct": { 898 | "version": "3.1.0", 899 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 900 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 901 | "dev": true, 902 | "requires": { 903 | "spdx-expression-parse": "^3.0.0", 904 | "spdx-license-ids": "^3.0.0" 905 | } 906 | }, 907 | "spdx-exceptions": { 908 | "version": "2.2.0", 909 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 910 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", 911 | "dev": true 912 | }, 913 | "spdx-expression-parse": { 914 | "version": "3.0.0", 915 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 916 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 917 | "dev": true, 918 | "requires": { 919 | "spdx-exceptions": "^2.1.0", 920 | "spdx-license-ids": "^3.0.0" 921 | } 922 | }, 923 | "spdx-license-ids": { 924 | "version": "3.0.5", 925 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 926 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", 927 | "dev": true 928 | }, 929 | "sprintf-js": { 930 | "version": "1.0.3", 931 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 932 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 933 | "dev": true 934 | }, 935 | "strip-eof": { 936 | "version": "1.0.0", 937 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 938 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 939 | }, 940 | "type-fest": { 941 | "version": "0.6.0", 942 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 943 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", 944 | "dev": true 945 | }, 946 | "typescript": { 947 | "version": "3.5.3", 948 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", 949 | "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", 950 | "dev": true 951 | }, 952 | "universal-user-agent": { 953 | "version": "3.0.0", 954 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-3.0.0.tgz", 955 | "integrity": "sha512-T3siHThqoj5X0benA5H0qcDnrKGXzU8TKoX15x/tQHw1hQBvIEBHjxQ2klizYsqBOO/Q+WuxoQUihadeeqDnoA==", 956 | "requires": { 957 | "os-name": "^3.0.0" 958 | } 959 | }, 960 | "url-template": { 961 | "version": "2.0.8", 962 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 963 | "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" 964 | }, 965 | "validate-npm-package-license": { 966 | "version": "3.0.4", 967 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 968 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 969 | "dev": true, 970 | "requires": { 971 | "spdx-correct": "^3.0.0", 972 | "spdx-expression-parse": "^3.0.0" 973 | } 974 | }, 975 | "which": { 976 | "version": "1.3.1", 977 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 978 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 979 | "requires": { 980 | "isexe": "^2.0.0" 981 | } 982 | }, 983 | "windows-release": { 984 | "version": "3.2.0", 985 | "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", 986 | "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", 987 | "requires": { 988 | "execa": "^1.0.0" 989 | } 990 | }, 991 | "wrappy": { 992 | "version": "1.0.2", 993 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 994 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 995 | } 996 | } 997 | } 998 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-user-status", 3 | "version": "0.1.2", 4 | "main": "dist/index.js", 5 | "typings": "dist/index.d.ts", 6 | "bin": { 7 | "github-user-status": "./dist/bin.js" 8 | }, 9 | "files": [ 10 | "dist", 11 | "README.md" 12 | ], 13 | "scripts": { 14 | "start": "tsc --watch", 15 | "build": "tsc --build", 16 | "test": "jest" 17 | }, 18 | "peerDependencies": {}, 19 | "husky": { 20 | "hooks": { 21 | "pre-commit": "pretty-quick --staged" 22 | } 23 | }, 24 | "prettier": { 25 | "printWidth": 80, 26 | "semi": false, 27 | "singleQuote": true, 28 | "trailingComma": "es5" 29 | }, 30 | "dependencies": { 31 | "@octokit/graphql": "^3.0.1", 32 | "commander": "^2.20.0", 33 | "node-emoji": "^1.10.0" 34 | }, 35 | "devDependencies": { 36 | "@types/commander": "^2.12.2", 37 | "@types/jest": "^24.0.16", 38 | "@types/node": "^12.6.9", 39 | "@types/node-emoji": "^1.8.1", 40 | "husky": "^3.0.2", 41 | "prettier": "^1.18.2", 42 | "pretty-quick": "^1.11.1", 43 | "typescript": "^3.5.3" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/bin.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import program from 'commander' 4 | import getUserStatus from './get-user-status' 5 | import changeUserStatus from './change-user-status' 6 | import emojis from 'node-emoji' 7 | 8 | interface MainOptions { 9 | token?: string 10 | emoji?: string 11 | username?: string 12 | message?: string 13 | } 14 | 15 | async function main({ emoji, username, message, token }: MainOptions) { 16 | if (!token) { 17 | throw new Error('Missing environment variable `GITHUB_TOKEN`.') 18 | } 19 | 20 | if (message) { 21 | const input = { emoji, message } 22 | return changeUserStatus(input, token) 23 | } 24 | 25 | return getUserStatus(token, username) 26 | } 27 | 28 | program 29 | .version(require('../package.json').version) 30 | .option('-u, --username [username]', 'The user to get the status of') 31 | .option('-m, --message [message]', 'The message to set your status with') 32 | .option('-e, --emoji [emoji]', 'The emoji to use for your status') 33 | .option( 34 | '-t, --token [token]', 35 | 'GitHub personal access token', 36 | process.env.GITHUB_TOKEN 37 | ) 38 | .parse(process.argv) 39 | 40 | main(program as MainOptions) 41 | .then(status => { 42 | console.log(emojis.emojify(`${status.emoji}: ${status.message}`, n => n)) 43 | }) 44 | .catch(err => { 45 | const insufficientScope = 46 | err.errors && 47 | err.errors.find((e: any) => e.type === 'INSUFFICIENT_SCOPES') 48 | if (insufficientScope) { 49 | console.error(insufficientScope.message) 50 | } else { 51 | console.error(err) 52 | } 53 | process.exit(1) 54 | }) 55 | -------------------------------------------------------------------------------- /src/change-user-status.ts: -------------------------------------------------------------------------------- 1 | import graphql from '@octokit/graphql' 2 | import { UserStatus } from './types' 3 | 4 | const query = `mutation changeUserStatus ($input: ChangeUserStatusInput!) { 5 | changeUserStatus (input: $input) { 6 | status { 7 | emoji 8 | message 9 | indicatesLimitedAvailability 10 | } 11 | } 12 | }` 13 | 14 | interface Input { 15 | emoji?: string 16 | message: string 17 | expiresAt?: string 18 | limitedAvailability?: boolean 19 | } 20 | 21 | export default async function changeUserStatus( 22 | input: Input, 23 | token: string 24 | ): Promise { 25 | const response = await graphql(query, { 26 | input, 27 | headers: { 28 | Authorization: `token ${token}`, 29 | }, 30 | }) 31 | 32 | return response.changeUserStatus.status 33 | } 34 | -------------------------------------------------------------------------------- /src/get-user-status.ts: -------------------------------------------------------------------------------- 1 | import graphql from '@octokit/graphql' 2 | import { UserStatus } from './types' 3 | 4 | const viewerQuery = `query getViewerStatus { 5 | viewer { 6 | status { 7 | emoji 8 | message 9 | indicatesLimitedAvailability 10 | } 11 | } 12 | }` 13 | 14 | const userQuery = `query getUserStatus ($user: String!) { 15 | user (login: $user) { 16 | status { 17 | emoji 18 | message 19 | indicatesLimitedAvailability 20 | } 21 | } 22 | }` 23 | 24 | export default async function getUserStatus( 25 | token: string, 26 | user?: string 27 | ): Promise { 28 | const headers = { 29 | Authorization: `token ${token}`, 30 | } 31 | 32 | let returnValue: UserStatus 33 | 34 | if (user) { 35 | const response = await graphql(userQuery, { user, headers }) 36 | returnValue = response.user.status 37 | } else { 38 | const response = await graphql(viewerQuery, { headers }) 39 | returnValue = response.viewer.status 40 | } 41 | 42 | return returnValue 43 | } 44 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import getUserStatus from './get-user-status' 4 | import changeUserStatus from './change-user-status' 5 | 6 | export { getUserStatus, changeUserStatus } 7 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export interface UserStatus { 2 | emoji: string 3 | message: string 4 | expiresAt?: string 5 | indicatesLimitedAvailability?: boolean 6 | } 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": false, 4 | "lib": ["es2015", "es2017"], 5 | "module": "commonjs", 6 | "moduleResolution": "node", 7 | "target": "es5", 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true, 10 | "noUnusedLocals": true, 11 | "pretty": true, 12 | "strict": true, 13 | "sourceMap": true, 14 | "outDir": "./dist", 15 | "skipLibCheck": true, 16 | "noImplicitAny": true, 17 | "esModuleInterop": true, 18 | "declaration": true 19 | }, 20 | "include": ["src/**/*", "types/**/*"], 21 | "compileOnSave": false 22 | } 23 | -------------------------------------------------------------------------------- /types/@octokit/graphql/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@octokit/graphql' { 2 | export interface Variables { 3 | headers?: any; 4 | [key: string]: any; 5 | } 6 | 7 | function query(query: string, variables: Variables): Promise; 8 | export default query; 9 | } 10 | --------------------------------------------------------------------------------