├── .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 |

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 |
--------------------------------------------------------------------------------