UNPKG

929 BJavaScriptView Raw
1module.exports = GitHubApi
2
3const defaultsDeep = require('lodash/defaultsDeep')
4const Hook = require('before-after-hook')
5
6const parseClientOptions = require('./lib/parse-client-options')
7const request = require('./lib/request')
8const ENDPOINT_DEFAULTS = require('./lib/endpoint').DEFAULTS
9
10const PLUGINS = [
11 require('./lib/plugins/authentication'),
12 require('./lib/plugins/endpoint-methods'),
13 require('./lib/plugins/pagination')
14]
15
16function GitHubApi (options) {
17 const defaults = defaultsDeep(parseClientOptions(options), ENDPOINT_DEFAULTS)
18
19 const hook = new Hook()
20 const api = {
21 // NOTE: github.hook, github.plugin and github.request are experimental APIs
22 // at this point and can change at any time
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}