mirror of
https://github.com/JamesIves/github-pages-deploy-action.git
synced 2023-12-15 20:03:39 +08:00
134 lines
5.3 KiB
JavaScript
134 lines
5.3 KiB
JavaScript
|
import { getUserAgent } from "universal-user-agent";
|
||
|
import { Collection } from "before-after-hook";
|
||
|
import { request } from "@octokit/request";
|
||
|
import { withCustomRequest } from "@octokit/graphql";
|
||
|
import { createTokenAuth } from "@octokit/auth-token";
|
||
|
import { VERSION } from "./version";
|
||
|
let Octokit = /** @class */ (() => {
|
||
|
class Octokit {
|
||
|
constructor(options = {}) {
|
||
|
const hook = new Collection();
|
||
|
const requestDefaults = {
|
||
|
baseUrl: request.endpoint.DEFAULTS.baseUrl,
|
||
|
headers: {},
|
||
|
request: Object.assign({}, options.request, {
|
||
|
hook: hook.bind(null, "request"),
|
||
|
}),
|
||
|
mediaType: {
|
||
|
previews: [],
|
||
|
format: "",
|
||
|
},
|
||
|
};
|
||
|
// prepend default user agent with `options.userAgent` if set
|
||
|
requestDefaults.headers["user-agent"] = [
|
||
|
options.userAgent,
|
||
|
`octokit-core.js/${VERSION} ${getUserAgent()}`,
|
||
|
]
|
||
|
.filter(Boolean)
|
||
|
.join(" ");
|
||
|
if (options.baseUrl) {
|
||
|
requestDefaults.baseUrl = options.baseUrl;
|
||
|
}
|
||
|
if (options.previews) {
|
||
|
requestDefaults.mediaType.previews = options.previews;
|
||
|
}
|
||
|
if (options.timeZone) {
|
||
|
requestDefaults.headers["time-zone"] = options.timeZone;
|
||
|
}
|
||
|
this.request = request.defaults(requestDefaults);
|
||
|
this.graphql = withCustomRequest(this.request).defaults({
|
||
|
...requestDefaults,
|
||
|
baseUrl: requestDefaults.baseUrl.replace(/\/api\/v3$/, "/api"),
|
||
|
});
|
||
|
this.log = Object.assign({
|
||
|
debug: () => { },
|
||
|
info: () => { },
|
||
|
warn: console.warn.bind(console),
|
||
|
error: console.error.bind(console),
|
||
|
}, options.log);
|
||
|
this.hook = hook;
|
||
|
// (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
|
||
|
// is unauthenticated. The `this.auth()` method is a no-op and no request hook is registred.
|
||
|
// (2) If only `options.auth` is set, use the default token authentication strategy.
|
||
|
// (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.
|
||
|
// TODO: type `options.auth` based on `options.authStrategy`.
|
||
|
if (!options.authStrategy) {
|
||
|
if (!options.auth) {
|
||
|
// (1)
|
||
|
this.auth = async () => ({
|
||
|
type: "unauthenticated",
|
||
|
});
|
||
|
}
|
||
|
else {
|
||
|
// (2)
|
||
|
const auth = createTokenAuth(options.auth);
|
||
|
// @ts-ignore ¯\_(ツ)_/¯
|
||
|
hook.wrap("request", auth.hook);
|
||
|
this.auth = auth;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
const auth = options.authStrategy(Object.assign({
|
||
|
request: this.request,
|
||
|
}, options.auth));
|
||
|
// @ts-ignore ¯\_(ツ)_/¯
|
||
|
hook.wrap("request", auth.hook);
|
||
|
this.auth = auth;
|
||
|
}
|
||
|
// apply plugins
|
||
|
// https://stackoverflow.com/a/16345172
|
||
|
const classConstructor = this.constructor;
|
||
|
classConstructor.plugins.forEach((plugin) => {
|
||
|
Object.assign(this, plugin(this, options));
|
||
|
});
|
||
|
}
|
||
|
static defaults(defaults) {
|
||
|
const OctokitWithDefaults = class extends this {
|
||
|
constructor(...args) {
|
||
|
const options = args[0] || {};
|
||
|
super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent
|
||
|
? {
|
||
|
userAgent: `${options.userAgent} ${defaults.userAgent}`,
|
||
|
}
|
||
|
: null));
|
||
|
}
|
||
|
};
|
||
|
return OctokitWithDefaults;
|
||
|
}
|
||
|
/**
|
||
|
* Attach a plugin (or many) to your Octokit instance.
|
||
|
*
|
||
|
* @example
|
||
|
* const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
|
||
|
*/
|
||
|
static plugin(p1, ...p2) {
|
||
|
var _a;
|
||
|
if (p1 instanceof Array) {
|
||
|
console.warn([
|
||
|
"Passing an array of plugins to Octokit.plugin() has been deprecated.",
|
||
|
"Instead of:",
|
||
|
" Octokit.plugin([plugin1, plugin2, ...])",
|
||
|
"Use:",
|
||
|
" Octokit.plugin(plugin1, plugin2, ...)",
|
||
|
].join("\n"));
|
||
|
}
|
||
|
const currentPlugins = this.plugins;
|
||
|
let newPlugins = [
|
||
|
...(p1 instanceof Array
|
||
|
? p1
|
||
|
: [p1]),
|
||
|
...p2,
|
||
|
];
|
||
|
const NewOctokit = (_a = class extends this {
|
||
|
},
|
||
|
_a.plugins = currentPlugins.concat(newPlugins.filter((plugin) => !currentPlugins.includes(plugin))),
|
||
|
_a);
|
||
|
return NewOctokit;
|
||
|
}
|
||
|
}
|
||
|
Octokit.VERSION = VERSION;
|
||
|
Octokit.plugins = [];
|
||
|
return Octokit;
|
||
|
})();
|
||
|
export { Octokit };
|