Skip to content

Commit 70e114a

Browse files
committed
feat: plugin API
1 parent 9625a58 commit 70e114a

24 files changed

+49
-63
lines changed

index.js

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,9 @@
1-
module.exports = GitHubApi
1+
const factory = require('./lib/factory')
22

3-
const endpoint = require('@octokit/request').endpoint
4-
const Hook = require('before-after-hook')
5-
6-
const parseClientOptions = require('./lib/parse-client-options')
7-
const requestWithDefaults = require('./lib/request-with-defaults')
8-
9-
const PLUGINS = [
10-
require('./lib/plugins/authentication'),
11-
require('./lib/plugins/endpoint-methods'),
12-
require('./lib/plugins/pagination')
3+
const CORE_PLUGINS = [
4+
require('./plugins/authentication'),
5+
require('./plugins/endpoint-methods'),
6+
require('./plugins/pagination')
137
]
148

15-
function GitHubApi (options) {
16-
const hook = new Hook()
17-
const api = {
18-
// NOTE: github.hook and github.plugin are experimental APIs
19-
// at this point and can change at any time
20-
hook,
21-
plugin: (pluginFunction) => pluginFunction(api),
22-
request: requestWithDefaults(hook, endpoint, parseClientOptions(options))
23-
}
24-
25-
PLUGINS.forEach(api.plugin)
26-
27-
return api
28-
}
9+
module.exports = factory(CORE_PLUGINS)

lib/constructor.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module.exports = Octokit
2+
3+
const endpoint = require('@octokit/request').endpoint
4+
const Hook = require('before-after-hook')
5+
6+
const parseClientOptions = require('./parse-client-options')
7+
const requestWithDefaults = require('./request-with-defaults')
8+
9+
function Octokit (plugins, options) {
10+
const hook = new Hook()
11+
const api = {
12+
hook,
13+
request: requestWithDefaults(hook, endpoint, parseClientOptions(options))
14+
}
15+
16+
plugins.forEach(pluginFunction => pluginFunction(api, options))
17+
18+
return api
19+
}

lib/factory.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = factory
2+
3+
const Octokit = require('./constructor')
4+
const registerPlugin = require('./register-plugin')
5+
6+
function factory (plugins) {
7+
const Api = Octokit.bind(null, plugins)
8+
Api.plugin = registerPlugin.bind(null, plugins)
9+
return Api
10+
}

lib/plugins/README.md

Lines changed: 0 additions & 31 deletions
This file was deleted.

lib/register-plugin.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module.exports = registerPlugin
2+
3+
const factory = require('./factory')
4+
5+
function registerPlugin (plugins, pluginFunction) {
6+
return factory(plugins.concat(pluginFunction))
7+
}

lib/plugins/authentication/before-request.js renamed to plugins/authentication/before-request.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module.exports = authenticationBeforeRequest
33
const btoa = require('btoa-lite')
44
const uniq = require('lodash/uniq')
55

6-
const deprecate = require('../../deprecate')
6+
const deprecate = require('../../lib/deprecate')
77

88
function authenticationBeforeRequest (state, options) {
99
if (!state.auth.type) {
File renamed without changes.

lib/plugins/endpoint-methods/index.js renamed to plugins/endpoint-methods/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module.exports = apiPlugin
55
const set = require('lodash/set')
66

77
const validate = require('./validate')
8-
const ENDPOINT_DEFAULTS = require('../../routes.json')
8+
const ENDPOINT_DEFAULTS = require('./routes.json')
99

1010
function apiPlugin (octokit) {
1111
octokit.hook.before('request', validate)
File renamed without changes.

0 commit comments

Comments
 (0)