1 | module.exports = GitHubApi
|
2 |
|
3 | const defaultsDeep = require('lodash/defaultsDeep')
|
4 | const Hook = require('before-after-hook')
|
5 |
|
6 | const parseClientOptions = require('./lib/parse-client-options')
|
7 | const request = require('./lib/request')
|
8 | const ENDPOINT_DEFAULTS = require('./lib/endpoint').DEFAULTS
|
9 |
|
10 | const PLUGINS = [
|
11 | require('./lib/plugins/authentication'),
|
12 | require('./lib/plugins/endpoint-methods'),
|
13 | require('./lib/plugins/pagination')
|
14 | ]
|
15 |
|
16 | function GitHubApi (options) {
|
17 | const defaults = defaultsDeep(parseClientOptions(options), ENDPOINT_DEFAULTS)
|
18 |
|
19 | const hook = new Hook()
|
20 | const api = {
|
21 |
|
22 |
|
23 | hook,
|
24 | plugin: (pluginFunction) => pluginFunction(api),
|
25 | request: (options) => api.hook('request', defaultsDeep(options, defaults), request)
|
26 | }
|
27 |
|
28 | PLUGINS.forEach(api.plugin)
|
29 |
|
30 | return api
|
31 | }
|