index.js 929 B

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