action-conventional-commits/dist/main/index.js

32387 lines
820 KiB
JavaScript
Raw Normal View History

module.exports =
/******/ (function(modules, runtime) { // webpackBootstrap
/******/ "use strict";
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ var threw = true;
/******/ try {
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ threw = false;
/******/ } finally {
/******/ if(threw) delete installedModules[moduleId];
/******/ }
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ __webpack_require__.ab = __dirname + "/";
/******/
/******/ // the startup function
/******/ function startup() {
/******/ // Load entry module and return exports
/******/ return __webpack_require__(872);
/******/ };
/******/
/******/ // run startup
/******/ return startup();
/******/ })
/************************************************************************/
/******/ ({
/***/ 0:
/***/ (function(module, __unusedexports, __webpack_require__) {
const { requestLog } = __webpack_require__(916);
const {
restEndpointMethods
} = __webpack_require__(842);
const Core = __webpack_require__(529);
const CORE_PLUGINS = [
__webpack_require__(190),
__webpack_require__(19), // deprecated: remove in v17
requestLog,
__webpack_require__(148),
restEndpointMethods,
__webpack_require__(430),
__webpack_require__(850) // deprecated: remove in v17
];
const OctokitRest = Core.plugin(CORE_PLUGINS);
function DeprecatedOctokit(options) {
const warn =
options && options.log && options.log.warn
? options.log.warn
: console.warn;
warn(
'[@octokit/rest] `const Octokit = require("@octokit/rest")` is deprecated. Use `const { Octokit } = require("@octokit/rest")` instead'
);
return new OctokitRest(options);
}
const Octokit = Object.assign(DeprecatedOctokit, {
Octokit: OctokitRest
});
Object.keys(OctokitRest).forEach(key => {
/* istanbul ignore else */
if (OctokitRest.hasOwnProperty(key)) {
Octokit[key] = OctokitRest[key];
}
});
module.exports = Octokit;
/***/ }),
/***/ 2:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const os = __webpack_require__(87);
const macosRelease = __webpack_require__(118);
const winRelease = __webpack_require__(49);
const osName = (platform, release) => {
if (!platform && release) {
throw new Error('You can\'t specify a `release` without specifying `platform`');
}
platform = platform || os.platform();
let id;
if (platform === 'darwin') {
if (!release && os.platform() === 'darwin') {
release = os.release();
}
const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS';
id = release ? macosRelease(release).name : '';
return prefix + (id ? ' ' + id : '');
}
if (platform === 'linux') {
if (!release && os.platform() === 'linux') {
release = os.release();
}
id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : '';
return 'Linux' + (id ? ' ' + id : '');
}
if (platform === 'win32') {
if (!release && os.platform() === 'win32') {
release = os.release();
}
id = release ? winRelease(release) : '';
return 'Windows' + (id ? ' ' + id : '');
}
return platform;
};
module.exports = osName;
/***/ }),
/***/ 9:
/***/ (function(module, __unusedexports, __webpack_require__) {
var once = __webpack_require__(969);
var noop = function() {};
var isRequest = function(stream) {
return stream.setHeader && typeof stream.abort === 'function';
};
var isChildProcess = function(stream) {
return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
};
var eos = function(stream, opts, callback) {
if (typeof opts === 'function') return eos(stream, null, opts);
if (!opts) opts = {};
callback = once(callback || noop);
var ws = stream._writableState;
var rs = stream._readableState;
var readable = opts.readable || (opts.readable !== false && stream.readable);
var writable = opts.writable || (opts.writable !== false && stream.writable);
var cancelled = false;
var onlegacyfinish = function() {
if (!stream.writable) onfinish();
};
var onfinish = function() {
writable = false;
if (!readable) callback.call(stream);
};
var onend = function() {
readable = false;
if (!writable) callback.call(stream);
};
var onexit = function(exitCode) {
callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
};
var onerror = function(err) {
callback.call(stream, err);
};
var onclose = function() {
process.nextTick(onclosenexttick);
};
var onclosenexttick = function() {
if (cancelled) return;
if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
};
var onrequest = function() {
stream.req.on('finish', onfinish);
};
if (isRequest(stream)) {
stream.on('complete', onfinish);
stream.on('abort', onclose);
if (stream.req) onrequest();
else stream.on('request', onrequest);
} else if (writable && !ws) { // legacy streams
stream.on('end', onlegacyfinish);
stream.on('close', onlegacyfinish);
}
if (isChildProcess(stream)) stream.on('exit', onexit);
stream.on('end', onend);
stream.on('finish', onfinish);
if (opts.error !== false) stream.on('error', onerror);
stream.on('close', onclose);
return function() {
cancelled = true;
stream.removeListener('complete', onfinish);
stream.removeListener('abort', onclose);
stream.removeListener('request', onrequest);
if (stream.req) stream.req.removeListener('finish', onfinish);
stream.removeListener('end', onlegacyfinish);
stream.removeListener('close', onlegacyfinish);
stream.removeListener('finish', onfinish);
stream.removeListener('exit', onexit);
stream.removeListener('end', onend);
stream.removeListener('error', onerror);
stream.removeListener('close', onclose);
};
};
module.exports = eos;
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 10:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __webpack_require__(534);
exports.default = (url) => {
// Cast to URL
url = url;
const options = {
protocol: url.protocol,
hostname: is_1.default.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
host: url.host,
hash: url.hash,
search: url.search,
pathname: url.pathname,
href: url.href,
path: `${url.pathname || ''}${url.search || ''}`
};
if (is_1.default.string(url.port) && url.port.length !== 0) {
options.port = Number(url.port);
}
if (url.username || url.password) {
options.auth = `${url.username || ''}:${url.password || ''}`;
}
return options;
};
/***/ }),
/***/ 11:
/***/ (function(module) {
// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
if (fn && cb) return wrappy(fn)(cb)
if (typeof fn !== 'function')
throw new TypeError('need wrapper function')
Object.keys(fn).forEach(function (k) {
wrapper[k] = fn[k]
})
return wrapper
function wrapper() {
var args = new Array(arguments.length)
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
var ret = fn.apply(this, args)
var cb = args[args.length-1]
if (typeof ret === 'function' && ret !== cb) {
Object.keys(cb).forEach(function (k) {
ret[k] = cb[k]
})
}
return ret
}
}
/***/ }),
/***/ 16:
/***/ (function(module) {
module.exports = require("tls");
/***/ }),
/***/ 18:
/***/ (function(module) {
module.exports = eval("require")("encoding");
/***/ }),
/***/ 19:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = authenticationPlugin;
const { Deprecation } = __webpack_require__(692);
const once = __webpack_require__(969);
const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));
const authenticate = __webpack_require__(674);
const beforeRequest = __webpack_require__(471);
const requestError = __webpack_require__(349);
function authenticationPlugin(octokit, options) {
if (options.auth) {
octokit.authenticate = () => {
deprecateAuthenticate(
octokit.log,
new Deprecation(
'[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor'
)
);
};
return;
}
const state = {
octokit,
auth: false
};
octokit.authenticate = authenticate.bind(null, state);
octokit.hook.before("request", beforeRequest.bind(null, state));
octokit.hook.error("request", requestError.bind(null, state));
}
/***/ }),
/***/ 20:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const cp = __webpack_require__(129);
const parse = __webpack_require__(568);
const enoent = __webpack_require__(881);
function spawn(command, args, options) {
// Parse the arguments
const parsed = parse(command, args, options);
// Spawn the child process
const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
// Hook into child process "exit" event to emit an error if the command
// does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
enoent.hookChildProcess(spawned, parsed);
return spawned;
}
function spawnSync(command, args, options) {
// Parse the arguments
const parsed = parse(command, args, options);
// Spawn the child process
const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
// Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
return result;
}
module.exports = spawn;
module.exports.spawn = spawn;
module.exports.sync = spawnSync;
module.exports._parse = parse;
module.exports._enoent = enoent;
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 36:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const p_cancelable_1 = __webpack_require__(557);
exports.CancelError = p_cancelable_1.CancelError;
const core_1 = __webpack_require__(946);
exports.RequestError =
// Errors to be exported
core_1.RequestError;
exports.MaxRedirectsError = core_1.MaxRedirectsError;
exports.CacheError = core_1.CacheError;
exports.UploadError = core_1.UploadError;
exports.TimeoutError = core_1.TimeoutError;
exports.HTTPError = core_1.HTTPError;
exports.ReadError = core_1.ReadError;
exports.UnsupportedProtocolError = core_1.UnsupportedProtocolError;
class ParseError extends core_1.RequestError {
constructor(error, response) {
const { options } = response.request;
super(`${error.message} in "${options.url.toString()}"`, error, response.request);
this.name = 'ParseError';
Object.defineProperty(this, 'response', {
enumerable: false,
value: response
});
}
}
exports.ParseError = ParseError;
/***/ }),
/***/ 39:
/***/ (function(module) {
"use strict";
module.exports = opts => {
opts = opts || {};
const env = opts.env || process.env;
const platform = opts.platform || process.platform;
if (platform !== 'win32') {
return 'PATH';
}
return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';
};
/***/ }),
/***/ 47:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = factory;
const Octokit = __webpack_require__(402);
const registerPlugin = __webpack_require__(855);
function factory(plugins) {
const Api = Octokit.bind(null, plugins || []);
Api.plugin = registerPlugin.bind(null, plugins || []);
return Api;
}
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 48:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class WeakableMap {
constructor() {
this.weakMap = new WeakMap();
this.map = new Map();
}
set(key, value) {
if (typeof key === 'object') {
this.weakMap.set(key, value);
}
else {
this.map.set(key, value);
}
}
get(key) {
if (typeof key === 'object') {
return this.weakMap.get(key);
}
return this.map.get(key);
}
has(key) {
if (typeof key === 'object') {
return this.weakMap.has(key);
}
return this.map.has(key);
}
}
exports.default = WeakableMap;
/***/ }),
/***/ 49:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const os = __webpack_require__(87);
const execa = __webpack_require__(955);
// Reference: https://www.gaijin.at/en/lstwinver.php
const names = new Map([
['10.0', '10'],
['6.3', '8.1'],
['6.2', '8'],
['6.1', '7'],
['6.0', 'Vista'],
['5.2', 'Server 2003'],
['5.1', 'XP'],
['5.0', '2000'],
['4.9', 'ME'],
['4.1', '98'],
['4.0', '95']
]);
const windowsRelease = release => {
const version = /\d+\.\d/.exec(release || os.release());
if (release && !version) {
throw new Error('`release` argument doesn\'t match `n.n`');
}
const ver = (version || [])[0];
// Server 2008, 2012, 2016, and 2019 versions are ambiguous with desktop versions and must be detected at runtime.
// If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version
// then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx
// If `wmic` is obsoloete (later versions of Windows 10), use PowerShell instead.
// If the resulting caption contains the year 2008, 2012, 2016 or 2019, it is a server version, so return a server OS name.
if ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) {
let stdout;
try {
stdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || '';
} catch (_) {
stdout = execa.sync('powershell', ['(Get-CimInstance -ClassName Win32_OperatingSystem).caption']).stdout || '';
}
const year = (stdout.match(/2008|2012|2016|2019/) || [])[0];
if (year) {
return `Server ${year}`;
}
}
return names.get(ver);
};
module.exports = windowsRelease;
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 53:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
2020-06-11 09:37:37 +02:00
// TODO: Use the `URL` global when targeting Node.js 10
const URLParser = typeof URL === 'undefined' ? __webpack_require__(835).URL : URL;
2020-06-11 09:37:37 +02:00
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
2020-06-11 09:37:37 +02:00
const testParameter = (name, filters) => {
return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
};
2020-06-11 09:37:37 +02:00
const normalizeDataURL = (urlString, {stripHash}) => {
const parts = urlString.match(/^data:(.*?),(.*?)(?:#(.*))?$/);
2020-06-11 09:37:37 +02:00
if (!parts) {
throw new Error(`Invalid URL: ${urlString}`);
}
2020-06-11 09:37:37 +02:00
const mediaType = parts[1].split(';');
const body = parts[2];
const hash = stripHash ? '' : parts[3];
2020-06-11 09:37:37 +02:00
let base64 = false;
2020-06-11 09:37:37 +02:00
if (mediaType[mediaType.length - 1] === 'base64') {
mediaType.pop();
base64 = true;
}
2020-06-11 09:37:37 +02:00
// Lowercase MIME type
const mimeType = (mediaType.shift() || '').toLowerCase();
const attributes = mediaType
.map(attribute => {
let [key, value = ''] = attribute.split('=').map(string => string.trim());
2020-06-11 09:37:37 +02:00
// Lowercase `charset`
if (key === 'charset') {
value = value.toLowerCase();
2020-06-11 09:37:37 +02:00
if (value === DATA_URL_DEFAULT_CHARSET) {
return '';
}
}
2020-06-11 09:37:37 +02:00
return `${key}${value ? `=${value}` : ''}`;
})
.filter(Boolean);
2020-06-11 09:37:37 +02:00
const normalizedMediaType = [
...attributes
];
2020-06-11 09:37:37 +02:00
if (base64) {
normalizedMediaType.push('base64');
}
2020-06-11 09:37:37 +02:00
if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
normalizedMediaType.unshift(mimeType);
}
2020-06-11 09:37:37 +02:00
return `data:${normalizedMediaType.join(';')},${base64 ? body.trim() : body}${hash ? `#${hash}` : ''}`;
};
2020-06-11 09:37:37 +02:00
const normalizeUrl = (urlString, options) => {
options = {
defaultProtocol: 'http:',
normalizeProtocol: true,
forceHttp: false,
forceHttps: false,
stripAuthentication: true,
stripHash: false,
stripWWW: true,
removeQueryParameters: [/^utm_\w+/i],
removeTrailingSlash: true,
removeDirectoryIndex: false,
sortQueryParameters: true,
...options
};
2020-06-11 09:37:37 +02:00
// TODO: Remove this at some point in the future
if (Reflect.has(options, 'normalizeHttps')) {
throw new Error('options.normalizeHttps is renamed to options.forceHttp');
}
2020-06-11 09:37:37 +02:00
if (Reflect.has(options, 'normalizeHttp')) {
throw new Error('options.normalizeHttp is renamed to options.forceHttps');
}
2020-06-11 09:37:37 +02:00
if (Reflect.has(options, 'stripFragment')) {
throw new Error('options.stripFragment is renamed to options.stripHash');
}
2020-06-11 09:37:37 +02:00
urlString = urlString.trim();
2020-06-11 09:37:37 +02:00
// Data URL
if (/^data:/i.test(urlString)) {
return normalizeDataURL(urlString, options);
}
2020-06-11 09:37:37 +02:00
const hasRelativeProtocol = urlString.startsWith('//');
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
2020-06-11 09:37:37 +02:00
// Prepend protocol
if (!isRelativeUrl) {
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
}
2020-06-11 09:37:37 +02:00
const urlObj = new URLParser(urlString);
2020-06-11 09:37:37 +02:00
if (options.forceHttp && options.forceHttps) {
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
}
2020-06-11 09:37:37 +02:00
if (options.forceHttp && urlObj.protocol === 'https:') {
urlObj.protocol = 'http:';
}
2020-06-11 09:37:37 +02:00
if (options.forceHttps && urlObj.protocol === 'http:') {
urlObj.protocol = 'https:';
}
2020-06-11 09:37:37 +02:00
// Remove auth
if (options.stripAuthentication) {
urlObj.username = '';
urlObj.password = '';
}
2020-06-11 09:37:37 +02:00
// Remove hash
if (options.stripHash) {
urlObj.hash = '';
}
2020-06-11 09:37:37 +02:00
// Remove duplicate slashes if not preceded by a protocol
if (urlObj.pathname) {
// TODO: Use the following instead when targeting Node.js 10
// `urlObj.pathname = urlObj.pathname.replace(/(?<!https?:)\/{2,}/g, '/');`
urlObj.pathname = urlObj.pathname.replace(/((?!:).|^)\/{2,}/g, (_, p1) => {
if (/^(?!\/)/g.test(p1)) {
return `${p1}/`;
}
2020-06-11 09:37:37 +02:00
return '/';
});
}
2020-06-11 09:37:37 +02:00
// Decode URI octets
if (urlObj.pathname) {
urlObj.pathname = decodeURI(urlObj.pathname);
}
2020-06-11 09:37:37 +02:00
// Remove directory index
if (options.removeDirectoryIndex === true) {
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
}
2020-06-11 09:37:37 +02:00
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
let pathComponents = urlObj.pathname.split('/');
const lastComponent = pathComponents[pathComponents.length - 1];
2020-06-11 09:37:37 +02:00
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
pathComponents = pathComponents.slice(0, pathComponents.length - 1);
urlObj.pathname = pathComponents.slice(1).join('/') + '/';
}
}
2020-06-11 09:37:37 +02:00
if (urlObj.hostname) {
// Remove trailing dot
urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
2020-06-11 09:37:37 +02:00
// Remove `www.`
if (options.stripWWW && /^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(urlObj.hostname)) {
// Each label should be max 63 at length (min: 2).
// The extension should be max 5 at length (min: 2).
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
}
}
2020-06-11 09:37:37 +02:00
// Remove query unwanted parameters
if (Array.isArray(options.removeQueryParameters)) {
for (const key of [...urlObj.searchParams.keys()]) {
if (testParameter(key, options.removeQueryParameters)) {
urlObj.searchParams.delete(key);
}
}
}
2020-06-11 09:37:37 +02:00
// Sort query parameters
if (options.sortQueryParameters) {
urlObj.searchParams.sort();
}
2020-06-11 09:37:37 +02:00
if (options.removeTrailingSlash) {
urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
}
2020-06-11 09:37:37 +02:00
// Take advantage of many of the Node `url` normalizations
urlString = urlObj.toString();
2020-06-11 09:37:37 +02:00
// Remove ending `/`
if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '') {
urlString = urlString.replace(/\/$/, '');
}
2020-06-11 09:37:37 +02:00
// Restore relative protocol, if applicable
if (hasRelativeProtocol && !options.normalizeProtocol) {
urlString = urlString.replace(/^http:\/\//, '//');
}
2020-06-11 09:37:37 +02:00
// Remove http/https
if (options.stripProtocol) {
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
}
2020-06-11 09:37:37 +02:00
return urlString;
};
2020-06-11 09:37:37 +02:00
module.exports = normalizeUrl;
// TODO: Remove this for the next major release
module.exports.default = normalizeUrl;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 77:
/***/ (function(module, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, "__esModule", { value: true });
const url_1 = __webpack_require__(835);
const create_1 = __webpack_require__(903);
const defaults = {
options: {
method: 'GET',
retry: {
limit: 2,
methods: [
'GET',
'PUT',
'HEAD',
'DELETE',
'OPTIONS',
'TRACE'
],
statusCodes: [
408,
413,
429,
500,
502,
503,
504,
521,
522,
524
],
errorCodes: [
'ETIMEDOUT',
'ECONNRESET',
'EADDRINUSE',
'ECONNREFUSED',
'EPIPE',
'ENOTFOUND',
'ENETUNREACH',
'EAI_AGAIN'
],
maxRetryAfter: undefined,
calculateDelay: ({ computedValue }) => computedValue
},
timeout: {},
headers: {
'user-agent': 'got (https://github.com/sindresorhus/got)'
},
hooks: {
init: [],
beforeRequest: [],
beforeRedirect: [],
beforeRetry: [],
beforeError: [],
afterResponse: []
},
cache: undefined,
dnsCache: undefined,
decompress: true,
throwHttpErrors: true,
followRedirect: true,
isStream: false,
responseType: 'text',
resolveBodyOnly: false,
maxRedirects: 10,
prefixUrl: '',
methodRewriting: true,
ignoreInvalidCookies: false,
context: {},
// TODO: Set this to `true` when Got 12 gets released
http2: false,
allowGetBody: false,
https: undefined,
pagination: {
transform: (response) => {
if (response.request.options.responseType === 'json') {
return response.body;
}
return JSON.parse(response.body);
},
paginate: response => {
if (!Reflect.has(response.headers, 'link')) {
return false;
}
const items = response.headers.link.split(',');
let next;
for (const item of items) {
const parsed = item.split(';');
if (parsed[1].includes('next')) {
next = parsed[0].trimStart().trim();
next = next.slice(1, -1);
break;
}
}
if (next) {
const options = {
url: new url_1.URL(next)
};
return options;
}
return false;
},
filter: () => true,
shouldContinue: () => true,
countLimit: Infinity,
requestLimit: 10000,
stackAllItems: true
},
parseJson: (text) => JSON.parse(text),
stringifyJson: (object) => JSON.stringify(object)
},
handlers: [create_1.defaultHandler],
mutableDefaults: false
};
const got = create_1.default(defaults);
exports.default = got;
// For CommonJS default export support
module.exports = got;
module.exports.default = got;
__export(__webpack_require__(903));
__export(__webpack_require__(952));
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 79:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const pump = __webpack_require__(453);
const bufferStream = __webpack_require__(625);
class MaxBufferError extends Error {
constructor() {
super('maxBuffer exceeded');
this.name = 'MaxBufferError';
}
}
2020-06-11 09:37:37 +02:00
function getStream(inputStream, options) {
if (!inputStream) {
return Promise.reject(new Error('Expected a stream'));
}
2020-06-11 09:37:37 +02:00
options = Object.assign({maxBuffer: Infinity}, options);
const {maxBuffer} = options;
let stream;
return new Promise((resolve, reject) => {
const rejectPromise = error => {
if (error) { // A null check
error.bufferedData = stream.getBufferedValue();
}
reject(error);
};
stream = pump(inputStream, bufferStream(options), error => {
if (error) {
rejectPromise(error);
return;
}
resolve();
});
stream.on('data', () => {
if (stream.getBufferedLength() > maxBuffer) {
rejectPromise(new MaxBufferError());
}
});
}).then(() => stream.getBufferedValue());
}
2020-06-11 09:37:37 +02:00
module.exports = getStream;
module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));
module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));
module.exports.MaxBufferError = MaxBufferError;
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 87:
/***/ (function(module) {
module.exports = require("os");
/***/ }),
/***/ 89:
/***/ (function(module) {
"use strict";
// We define these manually to ensure they're always copied
// even if they would move up the prototype chain
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
const knownProperties = [
'aborted',
'complete',
'headers',
'httpVersion',
'httpVersionMinor',
'httpVersionMajor',
'method',
'rawHeaders',
'rawTrailers',
'setTimeout',
'socket',
'statusCode',
'statusMessage',
'trailers',
'url'
];
module.exports = (fromStream, toStream) => {
if (toStream._readableState.autoDestroy) {
throw new Error('The second stream must have the `autoDestroy` option set to `false`');
}
const fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));
const properties = {};
for (const property of fromProperties) {
// Don't overwrite existing properties.
if (property in toStream) {
continue;
}
properties[property] = {
get() {
const value = fromStream[property];
const isFunction = typeof value === 'function';
return isFunction ? value.bind(fromStream) : value;
},
set(value) {
fromStream[property] = value;
},
enumerable: true,
configurable: false
};
}
Object.defineProperties(toStream, properties);
fromStream.once('aborted', () => {
toStream.destroy();
toStream.emit('aborted');
});
fromStream.once('close', () => {
if (fromStream.complete) {
if (toStream.readable) {
toStream.once('end', () => {
toStream.emit('close');
});
} else {
toStream.emit('close');
}
} else {
toStream.emit('close');
}
});
return toStream;
};
/***/ }),
/***/ 93:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const Readable = __webpack_require__(413).Readable;
const lowercaseKeys = __webpack_require__(474);
class Response extends Readable {
constructor(statusCode, headers, body, url) {
if (typeof statusCode !== 'number') {
throw new TypeError('Argument `statusCode` should be a number');
}
if (typeof headers !== 'object') {
throw new TypeError('Argument `headers` should be an object');
}
if (!(body instanceof Buffer)) {
throw new TypeError('Argument `body` should be a buffer');
}
if (typeof url !== 'string') {
throw new TypeError('Argument `url` should be a string');
}
super();
this.statusCode = statusCode;
this.headers = lowercaseKeys(headers);
this.body = body;
this.url = url;
}
_read() {
this.push(this.body);
this.push(null);
}
}
2020-06-11 09:37:37 +02:00
module.exports = Response;
/***/ }),
/***/ 118:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const os = __webpack_require__(87);
const nameMap = new Map([
[19, 'Catalina'],
[18, 'Mojave'],
[17, 'High Sierra'],
[16, 'Sierra'],
[15, 'El Capitan'],
[14, 'Yosemite'],
[13, 'Mavericks'],
[12, 'Mountain Lion'],
[11, 'Lion'],
[10, 'Snow Leopard'],
[9, 'Leopard'],
[8, 'Tiger'],
[7, 'Panther'],
[6, 'Jaguar'],
[5, 'Puma']
]);
const macosRelease = release => {
release = Number((release || os.release()).split('.')[0]);
return {
name: nameMap.get(release),
version: '10.' + (release - 4)
};
};
module.exports = macosRelease;
// TODO: remove this in the next major version
module.exports.default = macosRelease;
/***/ }),
/***/ 126:
/***/ (function(module) {
/**
2020-06-11 09:37:37 +02:00
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="npm" -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
2020-06-11 09:37:37 +02:00
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** `Object#toString` result references. */
var funcTag = '[object Function]',
genTag = '[object GeneratorFunction]';
/**
2020-06-11 09:37:37 +02:00
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
2020-06-11 09:37:37 +02:00
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
/**
2020-06-11 09:37:37 +02:00
* A specialized version of `_.includes` for arrays without support for
* specifying an index to search from.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
2020-06-11 09:37:37 +02:00
function arrayIncludes(array, value) {
var length = array ? array.length : 0;
return !!length && baseIndexOf(array, value, 0) > -1;
}
/**
2020-06-11 09:37:37 +02:00
* This function is like `arrayIncludes` except that it accepts a comparator.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {Array} [array] The array to inspect.
* @param {*} target The value to search for.
* @param {Function} comparator The comparator invoked per element.
* @returns {boolean} Returns `true` if `target` is found, else `false`.
*/
2020-06-11 09:37:37 +02:00
function arrayIncludesWith(array, value, comparator) {
var index = -1,
2020-06-11 09:37:37 +02:00
length = array ? array.length : 0;
while (++index < length) {
2020-06-11 09:37:37 +02:00
if (comparator(value, array[index])) {
return true;
}
}
2020-06-11 09:37:37 +02:00
return false;
}
/**
2020-06-11 09:37:37 +02:00
* The base implementation of `_.findIndex` and `_.findLastIndex` without
* support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
2020-06-11 09:37:37 +02:00
* @param {Function} predicate The function invoked per iteration.
* @param {number} fromIndex The index to search from.
* @param {boolean} [fromRight] Specify iterating from right to left.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
2020-06-11 09:37:37 +02:00
function baseFindIndex(array, predicate, fromIndex, fromRight) {
var length = array.length,
index = fromIndex + (fromRight ? 1 : -1);
while ((fromRight ? index-- : ++index < length)) {
if (predicate(array[index], index, array)) {
return index;
}
}
return -1;
}
/**
2020-06-11 09:37:37 +02:00
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
*
* @private
* @param {Array} array The array to inspect.
2020-06-11 09:37:37 +02:00
* @param {*} value The value to search for.
* @param {number} fromIndex The index to search from.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
2020-06-11 09:37:37 +02:00
function baseIndexOf(array, value, fromIndex) {
if (value !== value) {
return baseFindIndex(array, baseIsNaN, fromIndex);
}
2020-06-11 09:37:37 +02:00
var index = fromIndex - 1,
length = array.length;
2020-06-11 09:37:37 +02:00
while (++index < length) {
if (array[index] === value) {
return index;
}
}
2020-06-11 09:37:37 +02:00
return -1;
}
/**
2020-06-11 09:37:37 +02:00
* The base implementation of `_.isNaN` without support for number objects.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
*/
2020-06-11 09:37:37 +02:00
function baseIsNaN(value) {
return value !== value;
}
/**
2020-06-11 09:37:37 +02:00
* Checks if a cache value for `key` exists.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {Object} cache The cache to query.
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
2020-06-11 09:37:37 +02:00
function cacheHas(cache, key) {
return cache.has(key);
}
/**
2020-06-11 09:37:37 +02:00
* Gets the value at `key` of `object`.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
2020-06-11 09:37:37 +02:00
function getValue(object, key) {
return object == null ? undefined : object[key];
}
/**
2020-06-11 09:37:37 +02:00
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
2020-06-11 09:37:37 +02:00
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
2020-06-11 09:37:37 +02:00
function isHostObject(value) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false;
if (value != null && typeof value.toString != 'function') {
try {
result = !!(value + '');
} catch (e) {}
}
return result;
}
/**
2020-06-11 09:37:37 +02:00
* Converts `set` to an array of its values.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {Object} set The set to convert.
* @returns {Array} Returns the values.
*/
2020-06-11 09:37:37 +02:00
function setToArray(set) {
var index = -1,
result = Array(set.size);
set.forEach(function(value) {
result[++index] = value;
});
return result;
}
2020-06-11 09:37:37 +02:00
/** Used for built-in method references. */
var arrayProto = Array.prototype,
funcProto = Function.prototype,
objectProto = Object.prototype;
/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];
/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
return uid ? ('Symbol(src)_1.' + uid) : '';
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
2020-06-11 09:37:37 +02:00
var objectToString = objectProto.toString;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/** Built-in value references. */
var splice = arrayProto.splice;
/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map'),
Set = getNative(root, 'Set'),
nativeCreate = getNative(Object, 'create');
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
2020-06-11 09:37:37 +02:00
* Removes all key-value entries from the hash.
*
2020-06-11 09:37:37 +02:00
* @private
* @name clear
* @memberOf Hash
*/
2020-06-11 09:37:37 +02:00
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
}
/**
2020-06-11 09:37:37 +02:00
* Removes `key` and its value from the hash.
*
2020-06-11 09:37:37 +02:00
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
2020-06-11 09:37:37 +02:00
function hashDelete(key) {
return this.has(key) && delete this.__data__[key];
}
/**
2020-06-11 09:37:37 +02:00
* Gets the hash value for `key`.
*
2020-06-11 09:37:37 +02:00
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
2020-06-11 09:37:37 +02:00
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined;
}
/**
2020-06-11 09:37:37 +02:00
* Checks if a hash value for `key` exists.
*
2020-06-11 09:37:37 +02:00
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
2020-06-11 09:37:37 +02:00
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
}
/**
2020-06-11 09:37:37 +02:00
* Sets the hash `key` to `value`.
*
2020-06-11 09:37:37 +02:00
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
2020-06-11 09:37:37 +02:00
function hashSet(key, value) {
var data = this.__data__;
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
return this;
}
2020-06-11 09:37:37 +02:00
// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
2020-06-11 09:37:37 +02:00
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
2020-06-11 09:37:37 +02:00
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
2020-06-11 09:37:37 +02:00
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
}
2020-06-11 09:37:37 +02:00
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
2020-06-11 09:37:37 +02:00
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
return true;
}
2020-06-11 09:37:37 +02:00
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
2020-06-11 09:37:37 +02:00
return index < 0 ? undefined : data[index][1];
}
2020-06-11 09:37:37 +02:00
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
2020-06-11 09:37:37 +02:00
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__,
index = assocIndexOf(data, key);
2020-06-11 09:37:37 +02:00
if (index < 0) {
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
2020-06-11 09:37:37 +02:00
// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
2020-06-11 09:37:37 +02:00
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
2020-06-11 09:37:37 +02:00
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
2020-06-11 09:37:37 +02:00
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.__data__ = {
'hash': new Hash,
'map': new (Map || ListCache),
'string': new Hash
};
}
2020-06-11 09:37:37 +02:00
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
return getMapData(this, key)['delete'](key);
}
2020-06-11 09:37:37 +02:00
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
2020-06-11 09:37:37 +02:00
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
2020-06-11 09:37:37 +02:00
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
getMapData(this, key).set(key, value);
return this;
}
2020-06-11 09:37:37 +02:00
// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
2020-06-11 09:37:37 +02:00
/**
*
* Creates an array cache object to store unique values.
*
* @private
* @constructor
* @param {Array} [values] The values to cache.
*/
function SetCache(values) {
var index = -1,
length = values ? values.length : 0;
2020-06-11 09:37:37 +02:00
this.__data__ = new MapCache;
while (++index < length) {
this.add(values[index]);
}
}
2020-06-11 09:37:37 +02:00
/**
* Adds `value` to the array cache.
*
* @private
* @name add
* @memberOf SetCache
* @alias push
* @param {*} value The value to cache.
* @returns {Object} Returns the cache instance.
*/
function setCacheAdd(value) {
this.__data__.set(value, HASH_UNDEFINED);
return this;
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `value` is in the array cache.
*
* @private
* @name has
* @memberOf SetCache
* @param {*} value The value to search for.
* @returns {number} Returns `true` if `value` is found, else `false`.
*/
function setCacheHas(value) {
return this.__data__.has(value);
}
2020-06-11 09:37:37 +02:00
// Add methods to `SetCache`.
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
2020-06-11 09:37:37 +02:00
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
2020-06-11 09:37:37 +02:00
return -1;
}
2020-06-11 09:37:37 +02:00
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) {
return false;
}
2020-06-11 09:37:37 +02:00
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
2020-06-11 09:37:37 +02:00
/**
* The base implementation of `_.uniqBy` without support for iteratee shorthands.
*
* @private
* @param {Array} array The array to inspect.
* @param {Function} [iteratee] The iteratee invoked per element.
* @param {Function} [comparator] The comparator invoked per element.
* @returns {Array} Returns the new duplicate free array.
*/
function baseUniq(array, iteratee, comparator) {
var index = -1,
includes = arrayIncludes,
length = array.length,
isCommon = true,
result = [],
seen = result;
2020-06-11 09:37:37 +02:00
if (comparator) {
isCommon = false;
includes = arrayIncludesWith;
}
2020-06-11 09:37:37 +02:00
else if (length >= LARGE_ARRAY_SIZE) {
var set = iteratee ? null : createSet(array);
if (set) {
return setToArray(set);
}
isCommon = false;
includes = cacheHas;
seen = new SetCache;
}
else {
seen = iteratee ? [] : result;
}
outer:
while (++index < length) {
var value = array[index],
computed = iteratee ? iteratee(value) : value;
2020-06-11 09:37:37 +02:00
value = (comparator || value !== 0) ? value : 0;
if (isCommon && computed === computed) {
var seenIndex = seen.length;
while (seenIndex--) {
if (seen[seenIndex] === computed) {
continue outer;
}
}
2020-06-11 09:37:37 +02:00
if (iteratee) {
seen.push(computed);
}
result.push(value);
}
2020-06-11 09:37:37 +02:00
else if (!includes(seen, computed, comparator)) {
if (seen !== result) {
seen.push(computed);
}
result.push(value);
}
}
2020-06-11 09:37:37 +02:00
return result;
}
2020-06-11 09:37:37 +02:00
/**
* Creates a set object of `values`.
*
* @private
* @param {Array} values The values to add to the set.
* @returns {Object} Returns the new set.
*/
var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
return new Set(values);
};
2020-06-11 09:37:37 +02:00
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key)
? data[typeof key == 'string' ? 'string' : 'hash']
: data.map;
}
2020-06-11 09:37:37 +02:00
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined;
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
? (value !== '__proto__')
: (value === null);
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && (maskSrcKey in func);
}
2020-06-11 09:37:37 +02:00
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return (func + '');
} catch (e) {}
}
2020-06-11 09:37:37 +02:00
return '';
}
2020-06-11 09:37:37 +02:00
/**
* Creates a duplicate-free version of an array, using
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons, in which only the first occurrence of each
* element is kept.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Array
* @param {Array} array The array to inspect.
* @returns {Array} Returns the new duplicate free array.
* @example
*
* _.uniq([2, 1, 2]);
* // => [2, 1]
*/
function uniq(array) {
return (array && array.length)
? baseUniq(array)
: [];
}
2020-06-11 09:37:37 +02:00
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || (value !== value && other !== other);
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject(value) ? objectToString.call(value) : '';
return tag == funcTag || tag == genTag;
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return !!value && (type == 'object' || type == 'function');
}
2020-06-11 09:37:37 +02:00
/**
* This method returns `undefined`.
*
* @static
* @memberOf _
* @since 2.3.0
* @category Util
* @example
*
* _.times(2, _.noop);
* // => [undefined, undefined]
*/
function noop() {
// No operation performed.
}
2020-06-11 09:37:37 +02:00
module.exports = uniq;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 129:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = require("child_process");
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 141:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
var net = __webpack_require__(631);
var tls = __webpack_require__(16);
var http = __webpack_require__(605);
var https = __webpack_require__(211);
var events = __webpack_require__(614);
var assert = __webpack_require__(357);
var util = __webpack_require__(669);
2020-06-11 09:37:37 +02:00
exports.httpOverHttp = httpOverHttp;
exports.httpsOverHttp = httpsOverHttp;
exports.httpOverHttps = httpOverHttps;
exports.httpsOverHttps = httpsOverHttps;
2020-06-11 09:37:37 +02:00
function httpOverHttp(options) {
var agent = new TunnelingAgent(options);
agent.request = http.request;
return agent;
}
2020-06-11 09:37:37 +02:00
function httpsOverHttp(options) {
var agent = new TunnelingAgent(options);
agent.request = http.request;
agent.createSocket = createSecureSocket;
agent.defaultPort = 443;
return agent;
}
2020-06-11 09:37:37 +02:00
function httpOverHttps(options) {
var agent = new TunnelingAgent(options);
agent.request = https.request;
return agent;
}
2020-06-11 09:37:37 +02:00
function httpsOverHttps(options) {
var agent = new TunnelingAgent(options);
agent.request = https.request;
agent.createSocket = createSecureSocket;
agent.defaultPort = 443;
return agent;
}
2020-06-11 09:37:37 +02:00
function TunnelingAgent(options) {
var self = this;
self.options = options || {};
self.proxyOptions = self.options.proxy || {};
self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
self.requests = [];
self.sockets = [];
2020-06-11 09:37:37 +02:00
self.on('free', function onFree(socket, host, port, localAddress) {
var options = toOptions(host, port, localAddress);
for (var i = 0, len = self.requests.length; i < len; ++i) {
var pending = self.requests[i];
if (pending.host === options.host && pending.port === options.port) {
// Detect the request to connect same origin server,
// reuse the connection.
self.requests.splice(i, 1);
pending.request.onSocket(socket);
return;
}
}
socket.destroy();
self.removeSocket(socket);
});
}
util.inherits(TunnelingAgent, events.EventEmitter);
2020-06-11 09:37:37 +02:00
TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
var self = this;
var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
2020-06-11 09:37:37 +02:00
if (self.sockets.length >= this.maxSockets) {
// We are over limit so we'll add it to the queue.
self.requests.push(options);
return;
}
2020-06-11 09:37:37 +02:00
// If we are under maxSockets create a new one.
self.createSocket(options, function(socket) {
socket.on('free', onFree);
socket.on('close', onCloseOrRemove);
socket.on('agentRemove', onCloseOrRemove);
req.onSocket(socket);
2020-06-11 09:37:37 +02:00
function onFree() {
self.emit('free', socket, options);
}
2020-06-11 09:37:37 +02:00
function onCloseOrRemove(err) {
self.removeSocket(socket);
socket.removeListener('free', onFree);
socket.removeListener('close', onCloseOrRemove);
socket.removeListener('agentRemove', onCloseOrRemove);
}
});
};
2020-06-11 09:37:37 +02:00
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
var self = this;
var placeholder = {};
self.sockets.push(placeholder);
2020-06-11 09:37:37 +02:00
var connectOptions = mergeOptions({}, self.proxyOptions, {
method: 'CONNECT',
path: options.host + ':' + options.port,
agent: false,
headers: {
host: options.host + ':' + options.port
}
});
if (options.localAddress) {
connectOptions.localAddress = options.localAddress;
}
if (connectOptions.proxyAuth) {
connectOptions.headers = connectOptions.headers || {};
connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
new Buffer(connectOptions.proxyAuth).toString('base64');
}
2020-06-11 09:37:37 +02:00
debug('making CONNECT request');
var connectReq = self.request(connectOptions);
connectReq.useChunkedEncodingByDefault = false; // for v0.6
connectReq.once('response', onResponse); // for v0.6
connectReq.once('upgrade', onUpgrade); // for v0.6
connectReq.once('connect', onConnect); // for v0.7 or later
connectReq.once('error', onError);
connectReq.end();
2020-06-11 09:37:37 +02:00
function onResponse(res) {
// Very hacky. This is necessary to avoid http-parser leaks.
res.upgrade = true;
}
2020-06-11 09:37:37 +02:00
function onUpgrade(res, socket, head) {
// Hacky.
process.nextTick(function() {
onConnect(res, socket, head);
});
}
2020-06-11 09:37:37 +02:00
function onConnect(res, socket, head) {
connectReq.removeAllListeners();
socket.removeAllListeners();
2020-06-11 09:37:37 +02:00
if (res.statusCode !== 200) {
debug('tunneling socket could not be established, statusCode=%d',
res.statusCode);
socket.destroy();
var error = new Error('tunneling socket could not be established, ' +
'statusCode=' + res.statusCode);
error.code = 'ECONNRESET';
options.request.emit('error', error);
self.removeSocket(placeholder);
return;
}
if (head.length > 0) {
debug('got illegal response body from proxy');
socket.destroy();
var error = new Error('got illegal response body from proxy');
error.code = 'ECONNRESET';
options.request.emit('error', error);
self.removeSocket(placeholder);
return;
}
debug('tunneling connection has established');
self.sockets[self.sockets.indexOf(placeholder)] = socket;
return cb(socket);
}
2020-06-11 09:37:37 +02:00
function onError(cause) {
connectReq.removeAllListeners();
2020-06-11 09:37:37 +02:00
debug('tunneling socket could not be established, cause=%s\n',
cause.message, cause.stack);
var error = new Error('tunneling socket could not be established, ' +
'cause=' + cause.message);
error.code = 'ECONNRESET';
options.request.emit('error', error);
self.removeSocket(placeholder);
}
};
2020-06-11 09:37:37 +02:00
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
var pos = this.sockets.indexOf(socket)
if (pos === -1) {
return;
}
this.sockets.splice(pos, 1);
2020-06-11 09:37:37 +02:00
var pending = this.requests.shift();
if (pending) {
// If we have pending requests and a socket gets closed a new one
// needs to be created to take over in the pool for the one that closed.
this.createSocket(pending, function(socket) {
pending.request.onSocket(socket);
});
}
};
2020-06-11 09:37:37 +02:00
function createSecureSocket(options, cb) {
var self = this;
TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
var hostHeader = options.request.getHeader('host');
var tlsOptions = mergeOptions({}, self.options, {
socket: socket,
servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
});
2020-06-11 09:37:37 +02:00
// 0 is dummy port for v0.6
var secureSocket = tls.connect(0, tlsOptions);
self.sockets[self.sockets.indexOf(socket)] = secureSocket;
cb(secureSocket);
});
}
2020-06-11 09:37:37 +02:00
function toOptions(host, port, localAddress) {
if (typeof host === 'string') { // since v0.10
return {
host: host,
port: port,
localAddress: localAddress
};
}
2020-06-11 09:37:37 +02:00
return host; // for v0.11 or later
}
2020-06-11 09:37:37 +02:00
function mergeOptions(target) {
for (var i = 1, len = arguments.length; i < len; ++i) {
var overrides = arguments[i];
if (typeof overrides === 'object') {
var keys = Object.keys(overrides);
for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
var k = keys[j];
if (overrides[k] !== undefined) {
target[k] = overrides[k];
}
}
}
}
2020-06-11 09:37:37 +02:00
return target;
}
2020-06-11 09:37:37 +02:00
var debug;
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
debug = function() {
var args = Array.prototype.slice.call(arguments);
if (typeof args[0] === 'string') {
args[0] = 'TUNNEL: ' + args[0];
} else {
args.unshift('TUNNEL:');
}
console.error.apply(console, args);
}
2020-06-11 09:37:37 +02:00
} else {
debug = function() {};
}
exports.debug = debug; // for test
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 143:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = withAuthorizationPrefix;
2020-06-11 09:37:37 +02:00
const atob = __webpack_require__(368);
const REGEX_IS_BASIC_AUTH = /^[\w-]+:/;
function withAuthorizationPrefix(authorization) {
if (/^(basic|bearer|token) /i.test(authorization)) {
return authorization;
}
try {
if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) {
return `basic ${authorization}`;
}
} catch (error) {}
if (authorization.split(/\./).length === 3) {
return `bearer ${authorization}`;
}
return `token ${authorization}`;
}
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 145:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const pump = __webpack_require__(453);
const bufferStream = __webpack_require__(966);
2020-06-11 09:37:37 +02:00
class MaxBufferError extends Error {
constructor() {
super('maxBuffer exceeded');
this.name = 'MaxBufferError';
}
}
2020-06-11 09:37:37 +02:00
async function getStream(inputStream, options) {
if (!inputStream) {
return Promise.reject(new Error('Expected a stream'));
}
2020-06-11 09:37:37 +02:00
options = {
maxBuffer: Infinity,
...options
};
2020-06-11 09:37:37 +02:00
const {maxBuffer} = options;
2020-06-11 09:37:37 +02:00
let stream;
await new Promise((resolve, reject) => {
const rejectPromise = error => {
if (error) { // A null check
error.bufferedData = stream.getBufferedValue();
}
2020-06-11 09:37:37 +02:00
reject(error);
};
2020-06-11 09:37:37 +02:00
stream = pump(inputStream, bufferStream(options), error => {
if (error) {
rejectPromise(error);
return;
}
2020-06-11 09:37:37 +02:00
resolve();
});
stream.on('data', () => {
if (stream.getBufferedLength() > maxBuffer) {
rejectPromise(new MaxBufferError());
}
});
});
return stream.getBufferedValue();
}
2020-06-11 09:37:37 +02:00
module.exports = getStream;
// TODO: Remove this for the next major release
module.exports.default = getStream;
module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
module.exports.MaxBufferError = MaxBufferError;
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 148:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = paginatePlugin;
2020-06-11 09:37:37 +02:00
const { paginateRest } = __webpack_require__(299);
2020-06-11 09:37:37 +02:00
function paginatePlugin(octokit) {
Object.assign(octokit, paginateRest(octokit));
}
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 154:
/***/ (function(module) {
"use strict";
2020-06-11 09:37:37 +02:00
// rfc7231 6.1
const statusCodeCacheableByDefault = new Set([
200,
203,
204,
206,
300,
301,
404,
405,
410,
414,
501,
]);
2020-06-11 09:37:37 +02:00
// This implementation does not understand partial responses (206)
const understoodStatuses = new Set([
200,
203,
204,
300,
301,
302,
303,
307,
308,
404,
405,
410,
414,
501,
]);
2020-06-11 09:37:37 +02:00
const errorStatusCodes = new Set([
500,
502,
503,
504,
]);
2020-06-11 09:37:37 +02:00
const hopByHopHeaders = {
date: true, // included, because we add Age update Date
connection: true,
'keep-alive': true,
'proxy-authenticate': true,
'proxy-authorization': true,
te: true,
trailer: true,
'transfer-encoding': true,
upgrade: true,
};
2020-06-11 09:37:37 +02:00
const excludedFromRevalidationUpdate = {
// Since the old body is reused, it doesn't make sense to change properties of the body
'content-length': true,
'content-encoding': true,
'transfer-encoding': true,
'content-range': true,
};
2020-06-11 09:37:37 +02:00
function toNumberOrZero(s) {
const n = parseInt(s, 10);
return isFinite(n) ? n : 0;
}
2020-06-11 09:37:37 +02:00
// RFC 5861
function isErrorResponse(response) {
// consider undefined response as faulty
if(!response) {
return true
}
2020-06-11 09:37:37 +02:00
return errorStatusCodes.has(response.status);
}
2020-06-11 09:37:37 +02:00
function parseCacheControl(header) {
const cc = {};
if (!header) return cc;
2020-06-11 09:37:37 +02:00
// TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),
// the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale
const parts = header.trim().split(/\s*,\s*/); // TODO: lame parsing
for (const part of parts) {
const [k, v] = part.split(/\s*=\s*/, 2);
cc[k] = v === undefined ? true : v.replace(/^"|"$/g, ''); // TODO: lame unquoting
}
2020-06-11 09:37:37 +02:00
return cc;
}
2020-06-11 09:37:37 +02:00
function formatCacheControl(cc) {
let parts = [];
for (const k in cc) {
const v = cc[k];
parts.push(v === true ? k : k + '=' + v);
}
if (!parts.length) {
return undefined;
}
return parts.join(', ');
}
2020-06-11 09:37:37 +02:00
module.exports = class CachePolicy {
constructor(
req,
res,
{
shared,
cacheHeuristic,
immutableMinTimeToLive,
ignoreCargoCult,
_fromObject,
} = {}
) {
if (_fromObject) {
this._fromObject(_fromObject);
return;
}
2020-06-11 09:37:37 +02:00
if (!res || !res.headers) {
throw Error('Response headers missing');
}
this._assertRequestHasHeaders(req);
this._responseTime = this.now();
this._isShared = shared !== false;
this._cacheHeuristic =
undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE
this._immutableMinTtl =
undefined !== immutableMinTimeToLive
? immutableMinTimeToLive
: 24 * 3600 * 1000;
this._status = 'status' in res ? res.status : 200;
this._resHeaders = res.headers;
this._rescc = parseCacheControl(res.headers['cache-control']);
this._method = 'method' in req ? req.method : 'GET';
this._url = req.url;
this._host = req.headers.host;
this._noAuthorization = !req.headers.authorization;
this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used
this._reqcc = parseCacheControl(req.headers['cache-control']);
// Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,
// so there's no point stricly adhering to the blindly copy&pasted directives.
if (
ignoreCargoCult &&
'pre-check' in this._rescc &&
'post-check' in this._rescc
) {
delete this._rescc['pre-check'];
delete this._rescc['post-check'];
delete this._rescc['no-cache'];
delete this._rescc['no-store'];
delete this._rescc['must-revalidate'];
this._resHeaders = Object.assign({}, this._resHeaders, {
'cache-control': formatCacheControl(this._rescc),
});
delete this._resHeaders.expires;
delete this._resHeaders.pragma;
}
2020-06-11 09:37:37 +02:00
// When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive
// as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1).
if (
res.headers['cache-control'] == null &&
/no-cache/.test(res.headers.pragma)
) {
this._rescc['no-cache'] = true;
}
}
2020-06-11 09:37:37 +02:00
now() {
return Date.now();
}
2020-06-11 09:37:37 +02:00
storable() {
// The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.
return !!(
!this._reqcc['no-store'] &&
// A cache MUST NOT store a response to any request, unless:
// The request method is understood by the cache and defined as being cacheable, and
('GET' === this._method ||
'HEAD' === this._method ||
('POST' === this._method && this._hasExplicitExpiration())) &&
// the response status code is understood by the cache, and
understoodStatuses.has(this._status) &&
// the "no-store" cache directive does not appear in request or response header fields, and
!this._rescc['no-store'] &&
// the "private" response directive does not appear in the response, if the cache is shared, and
(!this._isShared || !this._rescc.private) &&
// the Authorization header field does not appear in the request, if the cache is shared,
(!this._isShared ||
this._noAuthorization ||
this._allowsStoringAuthenticated()) &&
// the response either:
// contains an Expires header field, or
(this._resHeaders.expires ||
// contains a max-age response directive, or
// contains a s-maxage response directive and the cache is shared, or
// contains a public response directive.
this._rescc['max-age'] ||
(this._isShared && this._rescc['s-maxage']) ||
this._rescc.public ||
// has a status code that is defined as cacheable by default
statusCodeCacheableByDefault.has(this._status))
);
}
2020-06-11 09:37:37 +02:00
_hasExplicitExpiration() {
// 4.2.1 Calculating Freshness Lifetime
return (
(this._isShared && this._rescc['s-maxage']) ||
this._rescc['max-age'] ||
this._resHeaders.expires
);
}
2020-06-11 09:37:37 +02:00
_assertRequestHasHeaders(req) {
if (!req || !req.headers) {
throw Error('Request headers missing');
}
}
2020-06-11 09:37:37 +02:00
satisfiesWithoutRevalidation(req) {
this._assertRequestHasHeaders(req);
2020-06-11 09:37:37 +02:00
// When presented with a request, a cache MUST NOT reuse a stored response, unless:
// the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,
// unless the stored response is successfully validated (Section 4.3), and
const requestCC = parseCacheControl(req.headers['cache-control']);
if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {
return false;
}
2020-06-11 09:37:37 +02:00
if (requestCC['max-age'] && this.age() > requestCC['max-age']) {
return false;
}
2020-06-11 09:37:37 +02:00
if (
requestCC['min-fresh'] &&
this.timeToLive() < 1000 * requestCC['min-fresh']
) {
return false;
}
2020-06-11 09:37:37 +02:00
// the stored response is either:
// fresh, or allowed to be served stale
if (this.stale()) {
const allowsStale =
requestCC['max-stale'] &&
!this._rescc['must-revalidate'] &&
(true === requestCC['max-stale'] ||
requestCC['max-stale'] > this.age() - this.maxAge());
if (!allowsStale) {
return false;
}
}
2020-06-11 09:37:37 +02:00
return this._requestMatches(req, false);
}
2020-06-11 09:37:37 +02:00
_requestMatches(req, allowHeadMethod) {
// The presented effective request URI and that of the stored response match, and
return (
(!this._url || this._url === req.url) &&
this._host === req.headers.host &&
// the request method associated with the stored response allows it to be used for the presented request, and
(!req.method ||
this._method === req.method ||
(allowHeadMethod && 'HEAD' === req.method)) &&
// selecting header fields nominated by the stored response (if any) match those presented, and
this._varyMatches(req)
);
}
2020-06-11 09:37:37 +02:00
_allowsStoringAuthenticated() {
// following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.
return (
this._rescc['must-revalidate'] ||
this._rescc.public ||
this._rescc['s-maxage']
);
}
2020-06-11 09:37:37 +02:00
_varyMatches(req) {
if (!this._resHeaders.vary) {
return true;
}
2020-06-11 09:37:37 +02:00
// A Vary header field-value of "*" always fails to match
if (this._resHeaders.vary === '*') {
return false;
}
2020-06-11 09:37:37 +02:00
const fields = this._resHeaders.vary
.trim()
.toLowerCase()
.split(/\s*,\s*/);
for (const name of fields) {
if (req.headers[name] !== this._reqHeaders[name]) return false;
}
return true;
}
2020-06-11 09:37:37 +02:00
_copyWithoutHopByHopHeaders(inHeaders) {
const headers = {};
for (const name in inHeaders) {
if (hopByHopHeaders[name]) continue;
headers[name] = inHeaders[name];
}
// 9.1. Connection
if (inHeaders.connection) {
const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
for (const name of tokens) {
delete headers[name];
}
}
if (headers.warning) {
const warnings = headers.warning.split(/,/).filter(warning => {
return !/^\s*1[0-9][0-9]/.test(warning);
});
if (!warnings.length) {
delete headers.warning;
} else {
headers.warning = warnings.join(',').trim();
}
}
return headers;
}
2020-06-11 09:37:37 +02:00
responseHeaders() {
const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
const age = this.age();
// A cache SHOULD generate 113 warning if it heuristically chose a freshness
// lifetime greater than 24 hours and the response's age is greater than 24 hours.
if (
age > 3600 * 24 &&
!this._hasExplicitExpiration() &&
this.maxAge() > 3600 * 24
) {
headers.warning =
(headers.warning ? `${headers.warning}, ` : '') +
'113 - "rfc7234 5.5.4"';
}
headers.age = `${Math.round(age)}`;
headers.date = new Date(this.now()).toUTCString();
return headers;
}
2020-06-11 09:37:37 +02:00
/**
* Value of the Date response header or current time if Date was invalid
* @return timestamp
*/
date() {
const serverDate = Date.parse(this._resHeaders.date);
if (isFinite(serverDate)) {
return serverDate;
}
return this._responseTime;
}
2020-06-11 09:37:37 +02:00
/**
* Value of the Age header, in seconds, updated for the current time.
* May be fractional.
*
* @return Number
*/
age() {
let age = this._ageValue();
2020-06-11 09:37:37 +02:00
const residentTime = (this.now() - this._responseTime) / 1000;
return age + residentTime;
}
2020-06-11 09:37:37 +02:00
_ageValue() {
return toNumberOrZero(this._resHeaders.age);
}
2020-06-11 09:37:37 +02:00
/**
* Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.
*
* For an up-to-date value, see `timeToLive()`.
*
* @return Number
*/
maxAge() {
if (!this.storable() || this._rescc['no-cache']) {
return 0;
}
2020-06-11 09:37:37 +02:00
// Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default
// so this implementation requires explicit opt-in via public header
if (
this._isShared &&
(this._resHeaders['set-cookie'] &&
!this._rescc.public &&
!this._rescc.immutable)
) {
return 0;
}
2020-06-11 09:37:37 +02:00
if (this._resHeaders.vary === '*') {
return 0;
}
2020-06-11 09:37:37 +02:00
if (this._isShared) {
if (this._rescc['proxy-revalidate']) {
return 0;
}
2020-06-11 09:37:37 +02:00
// if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.
if (this._rescc['s-maxage']) {
return toNumberOrZero(this._rescc['s-maxage']);
}
}
2020-06-11 09:37:37 +02:00
// If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.
if (this._rescc['max-age']) {
return toNumberOrZero(this._rescc['max-age']);
}
2020-06-11 09:37:37 +02:00
const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;
const serverDate = this.date();
if (this._resHeaders.expires) {
const expires = Date.parse(this._resHeaders.expires);
// A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
if (Number.isNaN(expires) || expires < serverDate) {
return 0;
}
return Math.max(defaultMinTtl, (expires - serverDate) / 1000);
}
2020-06-11 09:37:37 +02:00
if (this._resHeaders['last-modified']) {
const lastModified = Date.parse(this._resHeaders['last-modified']);
if (isFinite(lastModified) && serverDate > lastModified) {
return Math.max(
defaultMinTtl,
((serverDate - lastModified) / 1000) * this._cacheHeuristic
);
}
}
return defaultMinTtl;
}
2020-06-11 09:37:37 +02:00
timeToLive() {
const age = this.maxAge() - this.age();
const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);
const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);
return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;
}
2020-06-11 09:37:37 +02:00
stale() {
return this.maxAge() <= this.age();
}
2020-06-11 09:37:37 +02:00
_useStaleIfError() {
return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();
}
2020-06-11 09:37:37 +02:00
useStaleWhileRevalidate() {
return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();
}
2020-06-11 09:37:37 +02:00
static fromObject(obj) {
return new this(undefined, undefined, { _fromObject: obj });
}
2020-06-11 09:37:37 +02:00
_fromObject(obj) {
if (this._responseTime) throw Error('Reinitialized');
if (!obj || obj.v !== 1) throw Error('Invalid serialization');
this._responseTime = obj.t;
this._isShared = obj.sh;
this._cacheHeuristic = obj.ch;
this._immutableMinTtl =
obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;
this._status = obj.st;
this._resHeaders = obj.resh;
this._rescc = obj.rescc;
this._method = obj.m;
this._url = obj.u;
this._host = obj.h;
this._noAuthorization = obj.a;
this._reqHeaders = obj.reqh;
this._reqcc = obj.reqcc;
}
2020-06-11 09:37:37 +02:00
toObject() {
return {
v: 1,
t: this._responseTime,
sh: this._isShared,
ch: this._cacheHeuristic,
imm: this._immutableMinTtl,
st: this._status,
resh: this._resHeaders,
rescc: this._rescc,
m: this._method,
u: this._url,
h: this._host,
a: this._noAuthorization,
reqh: this._reqHeaders,
reqcc: this._reqcc,
};
}
2020-06-11 09:37:37 +02:00
/**
* Headers for sending to the origin server to revalidate stale response.
* Allows server to return 304 to allow reuse of the previous response.
*
* Hop by hop headers are always stripped.
* Revalidation headers may be added or removed, depending on request.
*/
revalidationHeaders(incomingReq) {
this._assertRequestHasHeaders(incomingReq);
const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);
// This implementation does not understand range requests
delete headers['if-range'];
if (!this._requestMatches(incomingReq, true) || !this.storable()) {
// revalidation allowed via HEAD
// not for the same resource, or wasn't allowed to be cached anyway
delete headers['if-none-match'];
delete headers['if-modified-since'];
return headers;
}
/* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */
if (this._resHeaders.etag) {
headers['if-none-match'] = headers['if-none-match']
? `${headers['if-none-match']}, ${this._resHeaders.etag}`
: this._resHeaders.etag;
}
// Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.
const forbidsWeakValidators =
headers['accept-ranges'] ||
headers['if-match'] ||
headers['if-unmodified-since'] ||
(this._method && this._method != 'GET');
/* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.
Note: This implementation does not understand partial responses (206) */
if (forbidsWeakValidators) {
delete headers['if-modified-since'];
if (headers['if-none-match']) {
const etags = headers['if-none-match']
.split(/,/)
.filter(etag => {
return !/^\s*W\//.test(etag);
});
if (!etags.length) {
delete headers['if-none-match'];
} else {
headers['if-none-match'] = etags.join(',').trim();
}
}
} else if (
this._resHeaders['last-modified'] &&
!headers['if-modified-since']
) {
headers['if-modified-since'] = this._resHeaders['last-modified'];
}
2020-06-11 09:37:37 +02:00
return headers;
}
2020-06-11 09:37:37 +02:00
/**
* Creates new CachePolicy with information combined from the previews response,
* and the new revalidation response.
*
* Returns {policy, modified} where modified is a boolean indicating
* whether the response body has been modified, and old cached body can't be used.
*
* @return {Object} {policy: CachePolicy, modified: Boolean}
*/
revalidatedPolicy(request, response) {
this._assertRequestHasHeaders(request);
if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful
return {
modified: false,
matches: false,
policy: this,
};
}
if (!response || !response.headers) {
throw Error('Response headers missing');
}
// These aren't going to be supported exactly, since one CachePolicy object
// doesn't know about all the other cached objects.
let matches = false;
if (response.status !== undefined && response.status != 304) {
matches = false;
} else if (
response.headers.etag &&
!/^\s*W\//.test(response.headers.etag)
) {
// "All of the stored responses with the same strong validator are selected.
// If none of the stored responses contain the same strong validator,
// then the cache MUST NOT use the new response to update any stored responses."
matches =
this._resHeaders.etag &&
this._resHeaders.etag.replace(/^\s*W\//, '') ===
response.headers.etag;
} else if (this._resHeaders.etag && response.headers.etag) {
// "If the new response contains a weak validator and that validator corresponds
// to one of the cache's stored responses,
// then the most recent of those matching stored responses is selected for update."
matches =
this._resHeaders.etag.replace(/^\s*W\//, '') ===
response.headers.etag.replace(/^\s*W\//, '');
} else if (this._resHeaders['last-modified']) {
matches =
this._resHeaders['last-modified'] ===
response.headers['last-modified'];
} else {
// If the new response does not include any form of validator (such as in the case where
// a client generates an If-Modified-Since request from a source other than the Last-Modified
// response header field), and there is only one stored response, and that stored response also
// lacks a validator, then that stored response is selected for update.
if (
!this._resHeaders.etag &&
!this._resHeaders['last-modified'] &&
!response.headers.etag &&
!response.headers['last-modified']
) {
matches = true;
}
}
2020-06-11 09:37:37 +02:00
if (!matches) {
return {
policy: new this.constructor(request, response),
// Client receiving 304 without body, even if it's invalid/mismatched has no option
// but to reuse a cached body. We don't have a good way to tell clients to do
// error recovery in such case.
modified: response.status != 304,
matches: false,
};
}
2020-06-11 09:37:37 +02:00
// use other header fields provided in the 304 (Not Modified) response to replace all instances
// of the corresponding header fields in the stored response.
const headers = {};
for (const k in this._resHeaders) {
headers[k] =
k in response.headers && !excludedFromRevalidationUpdate[k]
? response.headers[k]
: this._resHeaders[k];
}
const newResponse = Object.assign({}, response, {
status: this._status,
method: this._method,
headers,
});
return {
policy: new this.constructor(request, newResponse, {
shared: this._isShared,
cacheHeuristic: this._cacheHeuristic,
immutableMinTimeToLive: this._immutableMinTtl,
}),
modified: false,
matches: true,
};
}
};
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 157:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const http2 = __webpack_require__(565);
const agent = __webpack_require__(899);
const ClientRequest = __webpack_require__(181);
const IncomingMessage = __webpack_require__(750);
const auto = __webpack_require__(988);
2020-06-11 09:37:37 +02:00
const request = (url, options, callback) => {
return new ClientRequest(url, options, callback);
};
2020-06-11 09:37:37 +02:00
const get = (url, options, callback) => {
const req = new ClientRequest(url, options, callback);
req.end();
2020-06-11 09:37:37 +02:00
return req;
};
2020-06-11 09:37:37 +02:00
module.exports = {
...http2,
ClientRequest,
IncomingMessage,
...agent,
request,
get,
auto
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 168:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const alias = ['stdin', 'stdout', 'stderr'];
2020-06-11 09:37:37 +02:00
const hasAlias = opts => alias.some(x => Boolean(opts[x]));
2020-06-11 09:37:37 +02:00
module.exports = opts => {
if (!opts) {
return null;
}
2020-06-11 09:37:37 +02:00
if (opts.stdio && hasAlias(opts)) {
throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`);
}
2020-06-11 09:37:37 +02:00
if (typeof opts.stdio === 'string') {
return opts.stdio;
}
2020-06-11 09:37:37 +02:00
const stdio = opts.stdio || [];
2020-06-11 09:37:37 +02:00
if (!Array.isArray(stdio)) {
throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``);
}
2020-06-11 09:37:37 +02:00
const result = [];
const len = Math.max(stdio.length, alias.length);
2020-06-11 09:37:37 +02:00
for (let i = 0; i < len; i++) {
let value = null;
2020-06-11 09:37:37 +02:00
if (stdio[i] !== undefined) {
value = stdio[i];
} else if (opts[alias[i]] !== undefined) {
value = opts[alias[i]];
}
2020-06-11 09:37:37 +02:00
result[i] = value;
}
2020-06-11 09:37:37 +02:00
return result;
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 181:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const http2 = __webpack_require__(565);
const {Writable} = __webpack_require__(413);
const {Agent, globalAgent} = __webpack_require__(899);
const IncomingMessage = __webpack_require__(750);
const urlToOptions = __webpack_require__(507);
const proxyEvents = __webpack_require__(231);
const isRequestPseudoHeader = __webpack_require__(723);
const {
ERR_INVALID_ARG_TYPE,
ERR_INVALID_PROTOCOL,
ERR_HTTP_HEADERS_SENT,
ERR_INVALID_HTTP_TOKEN,
ERR_HTTP_INVALID_HEADER_VALUE,
ERR_INVALID_CHAR
} = __webpack_require__(699);
2020-06-11 09:37:37 +02:00
const {
HTTP2_HEADER_STATUS,
HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH,
HTTP2_METHOD_CONNECT
} = http2.constants;
const kHeaders = Symbol('headers');
const kOrigin = Symbol('origin');
const kSession = Symbol('session');
const kOptions = Symbol('options');
const kFlushedHeaders = Symbol('flushedHeaders');
const kJobs = Symbol('jobs');
const isValidHttpToken = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;
const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
class ClientRequest extends Writable {
constructor(input, options, callback) {
super({
autoDestroy: false
});
2020-06-11 09:37:37 +02:00
const hasInput = typeof input === 'string' || input instanceof URL;
if (hasInput) {
input = urlToOptions(input instanceof URL ? input : new URL(input));
}
2020-06-11 09:37:37 +02:00
if (typeof options === 'function' || options === undefined) {
// (options, callback)
callback = options;
options = hasInput ? input : {...input};
} else {
// (input, options, callback)
options = {...input, ...options};
}
2020-06-11 09:37:37 +02:00
if (options.h2session) {
this[kSession] = options.h2session;
} else if (options.agent === false) {
this.agent = new Agent({maxFreeSessions: 0});
} else if (typeof options.agent === 'undefined' || options.agent === null) {
if (typeof options.createConnection === 'function') {
// This is a workaround - we don't have to create the session on our own.
this.agent = new Agent({maxFreeSessions: 0});
this.agent.createConnection = options.createConnection;
} else {
this.agent = globalAgent;
}
} else if (typeof options.agent.request === 'function') {
this.agent = options.agent;
} else {
throw new ERR_INVALID_ARG_TYPE('options.agent', ['Agent-like Object', 'undefined', 'false'], options.agent);
}
2020-06-11 09:37:37 +02:00
if (!options.port) {
options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
}
2020-06-11 09:37:37 +02:00
options.host = options.hostname || options.host || 'localhost';
2020-06-11 09:37:37 +02:00
if (options.protocol && options.protocol !== 'https:') {
throw new ERR_INVALID_PROTOCOL(options.protocol, 'https:');
}
2020-06-11 09:37:37 +02:00
const {timeout} = options;
options.timeout = undefined;
2020-06-11 09:37:37 +02:00
this[kHeaders] = Object.create(null);
this[kJobs] = [];
2020-06-11 09:37:37 +02:00
this.socket = null;
this.connection = null;
2020-06-11 09:37:37 +02:00
this.method = options.method;
this.path = options.path;
2020-06-11 09:37:37 +02:00
this.res = null;
this.aborted = false;
this.reusedSocket = false;
2020-06-11 09:37:37 +02:00
if (options.headers) {
for (const [header, value] of Object.entries(options.headers)) {
this.setHeader(header, value);
}
}
2020-06-11 09:37:37 +02:00
if (options.auth && !('authorization' in this[kHeaders])) {
this[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64');
}
2020-06-11 09:37:37 +02:00
options.session = options.tlsSession;
options.path = options.socketPath;
2020-06-11 09:37:37 +02:00
this[kOptions] = options;
2020-06-11 09:37:37 +02:00
// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.
// What about IPv6? Square brackets?
if (options.port === 443) {
options.origin = `https://${options.host}`;
2020-06-11 09:37:37 +02:00
if (!(':authority' in this[kHeaders])) {
this[kHeaders][':authority'] = options.host;
}
} else {
options.origin = `https://${options.host}:${options.port}`;
2020-06-11 09:37:37 +02:00
if (!(':authority' in this[kHeaders])) {
this[kHeaders][':authority'] = `${options.host}:${options.port}`;
}
}
2020-06-11 09:37:37 +02:00
this[kOrigin] = options;
2020-06-11 09:37:37 +02:00
if (timeout) {
this.setTimeout(timeout);
}
2020-06-11 09:37:37 +02:00
if (callback) {
this.once('response', callback);
}
2020-06-11 09:37:37 +02:00
this[kFlushedHeaders] = false;
}
2020-06-11 09:37:37 +02:00
get method() {
return this[kHeaders][HTTP2_HEADER_METHOD];
}
2020-06-11 09:37:37 +02:00
set method(value) {
if (value) {
this[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase();
}
}
2020-06-11 09:37:37 +02:00
get path() {
return this[kHeaders][HTTP2_HEADER_PATH];
}
2020-06-11 09:37:37 +02:00
set path(value) {
if (value) {
this[kHeaders][HTTP2_HEADER_PATH] = value;
}
}
2020-06-11 09:37:37 +02:00
_write(chunk, encoding, callback) {
this.flushHeaders();
2020-06-11 09:37:37 +02:00
const callWrite = () => this._request.write(chunk, encoding, callback);
if (this._request) {
callWrite();
} else {
this[kJobs].push(callWrite);
}
}
2020-06-11 09:37:37 +02:00
_final(callback) {
if (this.destroyed) {
return;
}
2020-06-11 09:37:37 +02:00
this.flushHeaders();
2020-06-11 09:37:37 +02:00
const callEnd = () => this._request.end(callback);
if (this._request) {
callEnd();
} else {
this[kJobs].push(callEnd);
}
}
2020-06-11 09:37:37 +02:00
abort() {
if (this.res && this.res.complete) {
return;
}
2020-06-11 09:37:37 +02:00
if (!this.aborted) {
process.nextTick(() => this.emit('abort'));
}
2020-06-11 09:37:37 +02:00
this.aborted = true;
2020-06-11 09:37:37 +02:00
this.destroy();
}
2020-06-11 09:37:37 +02:00
_destroy(error, callback) {
if (this.res) {
this.res._dump();
}
2020-06-11 09:37:37 +02:00
if (this._request) {
this._request.destroy();
}
2020-06-11 09:37:37 +02:00
callback(error);
}
2020-06-11 09:37:37 +02:00
async flushHeaders() {
if (this[kFlushedHeaders] || this.destroyed) {
return;
}
2020-06-11 09:37:37 +02:00
this[kFlushedHeaders] = true;
2020-06-11 09:37:37 +02:00
const isConnectMethod = this.method === HTTP2_METHOD_CONNECT;
2020-06-11 09:37:37 +02:00
// The real magic is here
const onStream = stream => {
this._request = stream;
2020-06-11 09:37:37 +02:00
if (this.destroyed) {
stream.destroy();
return;
}
2020-06-11 09:37:37 +02:00
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
if (!isConnectMethod) {
proxyEvents(stream, this, ['timeout', 'continue', 'close', 'error']);
}
2020-06-11 09:37:37 +02:00
// This event tells we are ready to listen for the data.
stream.once('response', (headers, flags, rawHeaders) => {
// If we were to emit raw request stream, it would be as fast as the native approach.
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
const response = new IncomingMessage(this.socket, stream.readableHighWaterMark);
this.res = response;
response.req = this;
response.statusCode = headers[HTTP2_HEADER_STATUS];
response.headers = headers;
response.rawHeaders = rawHeaders;
response.once('end', () => {
if (this.aborted) {
response.aborted = true;
response.emit('aborted');
} else {
response.complete = true;
2020-06-11 09:37:37 +02:00
// Has no effect, just be consistent with the Node.js behavior
response.socket = null;
response.connection = null;
}
});
2020-06-11 09:37:37 +02:00
if (isConnectMethod) {
response.upgrade = true;
2020-06-11 09:37:37 +02:00
// The HTTP1 API says the socket is detached here,
// but we can't do that so we pass the original HTTP2 request.
if (this.emit('connect', response, stream, Buffer.alloc(0))) {
this.emit('close');
} else {
// No listeners attached, destroy the original request.
stream.destroy();
}
} else {
// Forwards data
stream.on('data', chunk => {
if (!response._dumped && !response.push(chunk)) {
stream.pause();
}
});
2020-06-11 09:37:37 +02:00
stream.once('end', () => {
response.push(null);
});
2020-06-11 09:37:37 +02:00
if (!this.emit('response', response)) {
// No listeners attached, dump the response.
response._dump();
}
}
});
2020-06-11 09:37:37 +02:00
// Emits `information` event
stream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));
2020-06-11 09:37:37 +02:00
stream.once('trailers', (trailers, flags, rawTrailers) => {
const {res} = this;
2020-06-11 09:37:37 +02:00
// Assigns trailers to the response object.
res.trailers = trailers;
res.rawTrailers = rawTrailers;
});
2020-06-11 09:37:37 +02:00
const {socket} = stream.session;
this.socket = socket;
this.connection = socket;
2020-06-11 09:37:37 +02:00
for (const job of this[kJobs]) {
job();
}
2020-06-11 09:37:37 +02:00
this.emit('socket', this.socket);
};
2020-06-11 09:37:37 +02:00
// Makes a HTTP2 request
if (this[kSession]) {
try {
onStream(this[kSession].request(this[kHeaders], {
endStream: false
}));
} catch (error) {
this.emit('error', error);
}
} else {
this.reusedSocket = true;
2020-06-11 09:37:37 +02:00
try {
onStream(await this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]));
} catch (error) {
this.emit('error', error);
}
}
}
2020-06-11 09:37:37 +02:00
getHeader(name) {
if (typeof name !== 'string') {
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
}
2020-06-11 09:37:37 +02:00
return this[kHeaders][name.toLowerCase()];
}
2020-06-11 09:37:37 +02:00
get headersSent() {
return this[kFlushedHeaders];
}
2020-06-11 09:37:37 +02:00
removeHeader(name) {
if (typeof name !== 'string') {
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
}
2020-06-11 09:37:37 +02:00
if (this.headersSent) {
throw new ERR_HTTP_HEADERS_SENT('remove');
}
2020-06-11 09:37:37 +02:00
delete this[kHeaders][name.toLowerCase()];
}
2020-06-11 09:37:37 +02:00
setHeader(name, value) {
if (this.headersSent) {
throw new ERR_HTTP_HEADERS_SENT('set');
}
2020-06-11 09:37:37 +02:00
if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
}
2020-06-11 09:37:37 +02:00
if (typeof value === 'undefined') {
throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
}
2020-06-11 09:37:37 +02:00
if (isInvalidHeaderValue.test(value)) {
throw new ERR_INVALID_CHAR('header content', name);
}
2020-06-11 09:37:37 +02:00
this[kHeaders][name.toLowerCase()] = value;
}
2020-06-11 09:37:37 +02:00
setNoDelay() {
// HTTP2 sockets cannot be malformed, do nothing.
}
2020-06-11 09:37:37 +02:00
setSocketKeepAlive() {
// HTTP2 sockets cannot be malformed, do nothing.
}
2020-06-11 09:37:37 +02:00
setTimeout(ms, callback) {
const applyTimeout = () => this._request.setTimeout(ms, callback);
2020-06-11 09:37:37 +02:00
if (this._request) {
applyTimeout();
} else {
this[kJobs].push(applyTimeout);
}
2020-06-11 09:37:37 +02:00
return this;
}
2020-06-11 09:37:37 +02:00
get maxHeadersCount() {
if (!this.destroyed && this._request) {
return this._request.session.localSettings.maxHeaderListSize;
}
2020-06-11 09:37:37 +02:00
return undefined;
}
2020-06-11 09:37:37 +02:00
set maxHeadersCount(_value) {
// Updating HTTP2 settings would affect all requests, do nothing.
}
}
2020-06-11 09:37:37 +02:00
module.exports = ClientRequest;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 189:
/***/ (function(__unusedmodule, exports) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, "__esModule", { value: true });
const alreadyWarned = new Set();
exports.default = (message) => {
if (alreadyWarned.has(message)) {
return;
}
alreadyWarned.add(message);
// @ts-ignore Missing types.
process.emitWarning(`Got: ${message}`, {
type: 'DeprecationWarning'
});
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 190:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = authenticationPlugin;
const { createTokenAuth } = __webpack_require__(813);
const { Deprecation } = __webpack_require__(692);
const once = __webpack_require__(969);
const beforeRequest = __webpack_require__(863);
const requestError = __webpack_require__(293);
const validate = __webpack_require__(954);
const withAuthorizationPrefix = __webpack_require__(143);
const deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation));
const deprecateAuthObject = once((log, deprecation) => log.warn(deprecation));
function authenticationPlugin(octokit, options) {
// If `options.authStrategy` is set then use it and pass in `options.auth`
if (options.authStrategy) {
const auth = options.authStrategy(options.auth);
octokit.hook.wrap("request", auth.hook);
octokit.auth = auth;
return;
}
2020-06-11 09:37:37 +02:00
// If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
// is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred.
if (!options.auth) {
octokit.auth = () =>
Promise.resolve({
type: "unauthenticated"
});
return;
}
2020-06-11 09:37:37 +02:00
const isBasicAuthString =
typeof options.auth === "string" &&
/^basic/.test(withAuthorizationPrefix(options.auth));
2020-06-11 09:37:37 +02:00
// If only `options.auth` is set to a string, use the default token authentication strategy.
if (typeof options.auth === "string" && !isBasicAuthString) {
const auth = createTokenAuth(options.auth);
octokit.hook.wrap("request", auth.hook);
octokit.auth = auth;
return;
}
2020-06-11 09:37:37 +02:00
// Otherwise log a deprecation message
const [deprecationMethod, deprecationMessapge] = isBasicAuthString
? [
deprecateAuthBasic,
'Setting the "new Octokit({ auth })" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)'
]
: [
deprecateAuthObject,
'Setting the "new Octokit({ auth })" option to an object without also setting the "authStrategy" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)'
];
deprecationMethod(
octokit.log,
new Deprecation("[@octokit/rest] " + deprecationMessapge)
);
octokit.auth = () =>
Promise.resolve({
type: "deprecated",
message: deprecationMessapge
});
validate(options.auth);
const state = {
octokit,
auth: options.auth
};
octokit.hook.before("request", beforeRequest.bind(null, state));
octokit.hook.error("request", requestError.bind(null, state));
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 197:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = isexe
isexe.sync = sync
var fs = __webpack_require__(747)
function isexe (path, options, cb) {
fs.stat(path, function (er, stat) {
cb(er, er ? false : checkStat(stat, options))
})
}
2020-06-11 09:37:37 +02:00
function sync (path, options) {
return checkStat(fs.statSync(path), options)
}
2020-06-11 09:37:37 +02:00
function checkStat (stat, options) {
return stat.isFile() && checkMode(stat, options)
}
2020-06-11 09:37:37 +02:00
function checkMode (stat, options) {
var mod = stat.mode
var uid = stat.uid
var gid = stat.gid
2020-06-11 09:37:37 +02:00
var myUid = options.uid !== undefined ?
options.uid : process.getuid && process.getuid()
var myGid = options.gid !== undefined ?
options.gid : process.getgid && process.getgid()
2020-06-11 09:37:37 +02:00
var u = parseInt('100', 8)
var g = parseInt('010', 8)
var o = parseInt('001', 8)
var ug = u | g
var ret = (mod & o) ||
(mod & g) && gid === myGid ||
(mod & u) && uid === myUid ||
(mod & ug) && myUid === 0
return ret
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 205:
/***/ (function(__unusedmodule, exports) {
2020-06-11 09:37:37 +02:00
//TODO: handle reviver/dehydrate function like normal
//and handle indentation, like normal.
//if anyone needs this... please send pull request.
exports.stringify = function stringify (o) {
if('undefined' == typeof o) return o
if(o && Buffer.isBuffer(o))
return JSON.stringify(':base64:' + o.toString('base64'))
if(o && o.toJSON)
o = o.toJSON()
if(o && 'object' === typeof o) {
var s = ''
var array = Array.isArray(o)
s = array ? '[' : '{'
var first = true
for(var k in o) {
var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])
if(Object.hasOwnProperty.call(o, k) && !ignore) {
if(!first)
s += ','
first = false
if (array) {
if(o[k] == undefined)
s += 'null'
else
s += stringify(o[k])
} else if (o[k] !== void(0)) {
s += stringify(k) + ':' + stringify(o[k])
}
}
}
2020-06-11 09:37:37 +02:00
s += array ? ']' : '}'
2020-06-11 09:37:37 +02:00
return s
} else if ('string' === typeof o) {
return JSON.stringify(/^:/.test(o) ? ':' + o : o)
} else if ('undefined' === typeof o) {
return 'null';
} else
return JSON.stringify(o)
}
2020-06-11 09:37:37 +02:00
exports.parse = function (s) {
return JSON.parse(s, function (key, value) {
if('string' === typeof value) {
if(/^:base64:/.test(value))
return Buffer.from(value.substring(8), 'base64')
else
return /^:/.test(value) ? value.substring(1) : value
}
2020-06-11 09:37:37 +02:00
return value
})
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 210:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
// We define these manually to ensure they're always copied
// even if they would move up the prototype chain
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
const knownProps = [
'destroy',
'setTimeout',
'socket',
'headers',
'trailers',
'rawHeaders',
'statusCode',
'httpVersion',
'httpVersionMinor',
'httpVersionMajor',
'rawTrailers',
'statusMessage'
];
2020-06-11 09:37:37 +02:00
module.exports = (fromStream, toStream) => {
const fromProps = new Set(Object.keys(fromStream).concat(knownProps));
2020-06-11 09:37:37 +02:00
for (const prop of fromProps) {
// Don't overwrite existing properties
if (prop in toStream) {
continue;
}
2020-06-11 09:37:37 +02:00
toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
}
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 211:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = require("https");
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 215:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = {"name":"@octokit/rest","version":"16.43.1","publishConfig":{"access":"public"},"description":"GitHub REST API client for Node.js","keywords":["octokit","github","rest","api-client"],"author":"Gregor Martynus (https://github.com/gr2m)","contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"repository":"https://github.com/octokit/rest.js","dependencies":{"@octokit/auth-token":"^2.4.0","@octokit/plugin-paginate-rest":"^1.1.1","@octokit/plugin-request-log":"^1.0.0","@octokit/plugin-rest-endpoint-methods":"2.4.0","@octokit/request":"^5.2.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^4.0.0"},"devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/auth":"^1.1.1","@octokit/fixtures-server":"^5.0.6","@octokit/graphql":"^4.2.0","@types/node":"^13.1.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.1.0","cypress":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^4.0.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","lolex":"^5.1.2","mkdirp":"^1.0.0","mocha":"^7.0.1","mustache":"^4.0.0","nock":"^11.3.3","npm-run-all":"^4.1.2","nyc":"^15.0.0","prettier":"^1.14.2","proxy":"^1.0.0","semantic-release":"^17.0.0","sinon":"^8.0.0","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"types":"index.d.ts","scripts":{"coverage":"nyc report --reporter=html && open coverage/index.html","lint":"prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","lint:fix":"prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","pretest":"npm run -s lint","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","build":"npm-run-all build:*","build:ts":"npm run -s update-endpoints:typescript","prebuild:browser":"mkdirp dist/","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","update-endpoints":"npm-run-all update-endpoints:*","update-endpoints:fetch-json":"node scripts/update-endpoints/fetch-json","update-endpoints:typescript":"node scripts/update-endpoints/typescript","prevalidate:ts":"npm run -s build:ts","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","start-fixtures-server":"octokit-fixtures-server"},"license":"MIT","files":["index.js","index.d.ts","lib","plugins"],"nyc":{"ignore":["test"]},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}]};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 231:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
module.exports = (from, to, events) => {
for (const event of events) {
from.on(event, (...args) => to.emit(event, ...args));
}
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 257:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, '__esModule', { value: true });
2020-06-11 09:37:37 +02:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2020-06-11 09:37:37 +02:00
var deprecation = __webpack_require__(692);
var once = _interopDefault(__webpack_require__(969));
2020-06-11 09:37:37 +02:00
const logOnce = once(deprecation => console.warn(deprecation));
/**
* Error with extra properties to help with debugging
*/
2020-06-11 09:37:37 +02:00
class RequestError extends Error {
constructor(message, statusCode, options) {
super(message); // Maintains proper stack trace (only available on V8)
2020-06-11 09:37:37 +02:00
/* istanbul ignore next */
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
2020-06-11 09:37:37 +02:00
this.name = "HttpError";
this.status = statusCode;
Object.defineProperty(this, "code", {
get() {
logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
return statusCode;
}
2020-06-11 09:37:37 +02:00
});
this.headers = options.headers || {}; // redact request credentials without mutating original request options
2020-06-11 09:37:37 +02:00
const requestCopy = Object.assign({}, options.request);
if (options.request.headers.authorization) {
requestCopy.headers = Object.assign({}, options.request.headers, {
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
});
}
2020-06-11 09:37:37 +02:00
requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
// see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
// see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
.replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
this.request = requestCopy;
}
}
2020-06-11 09:37:37 +02:00
exports.RequestError = RequestError;
//# sourceMappingURL=index.js.map
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 260:
/***/ (function(module, __unusedexports, __webpack_require__) {
// Note: since nyc uses this module to output coverage, any lines
// that are in the direct sync flow of nyc's outputCoverage are
// ignored, since we can never get coverage for them.
var assert = __webpack_require__(357)
var signals = __webpack_require__(654)
var isWin = /^win/i.test(process.platform)
var EE = __webpack_require__(614)
/* istanbul ignore if */
if (typeof EE !== 'function') {
EE = EE.EventEmitter
}
2020-06-11 09:37:37 +02:00
var emitter
if (process.__signal_exit_emitter__) {
emitter = process.__signal_exit_emitter__
} else {
emitter = process.__signal_exit_emitter__ = new EE()
emitter.count = 0
emitter.emitted = {}
}
2020-06-11 09:37:37 +02:00
// Because this emitter is a global, we have to check to see if a
// previous version of this library failed to enable infinite listeners.
// I know what you're about to say. But literally everything about
// signal-exit is a compromise with evil. Get used to it.
if (!emitter.infinite) {
emitter.setMaxListeners(Infinity)
emitter.infinite = true
}
module.exports = function (cb, opts) {
assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')
if (loaded === false) {
load()
}
2020-06-11 09:37:37 +02:00
var ev = 'exit'
if (opts && opts.alwaysLast) {
ev = 'afterexit'
}
2020-06-11 09:37:37 +02:00
var remove = function () {
emitter.removeListener(ev, cb)
if (emitter.listeners('exit').length === 0 &&
emitter.listeners('afterexit').length === 0) {
unload()
}
}
2020-06-11 09:37:37 +02:00
emitter.on(ev, cb)
2020-06-11 09:37:37 +02:00
return remove
}
2020-06-11 09:37:37 +02:00
module.exports.unload = unload
function unload () {
if (!loaded) {
return
}
2020-06-11 09:37:37 +02:00
loaded = false
2020-06-11 09:37:37 +02:00
signals.forEach(function (sig) {
try {
process.removeListener(sig, sigListeners[sig])
} catch (er) {}
})
process.emit = originalProcessEmit
process.reallyExit = originalProcessReallyExit
emitter.count -= 1
}
2020-06-11 09:37:37 +02:00
function emit (event, code, signal) {
if (emitter.emitted[event]) {
return
}
2020-06-11 09:37:37 +02:00
emitter.emitted[event] = true
emitter.emit(event, code, signal)
}
2020-06-11 09:37:37 +02:00
// { <signal>: <listener fn>, ... }
var sigListeners = {}
signals.forEach(function (sig) {
sigListeners[sig] = function listener () {
// If there are no other listeners, an exit is coming!
// Simplest way: remove us and then re-send the signal.
// We know that this will kill the process, so we can
// safely emit now.
var listeners = process.listeners(sig)
if (listeners.length === emitter.count) {
unload()
emit('exit', null, sig)
/* istanbul ignore next */
emit('afterexit', null, sig)
/* istanbul ignore next */
if (isWin && sig === 'SIGHUP') {
// "SIGHUP" throws an `ENOSYS` error on Windows,
// so use a supported signal instead
sig = 'SIGINT'
}
2020-06-11 09:37:37 +02:00
process.kill(process.pid, sig)
}
2020-06-11 09:37:37 +02:00
}
})
module.exports.signals = function () {
return signals
}
2020-06-11 09:37:37 +02:00
module.exports.load = load
2020-06-11 09:37:37 +02:00
var loaded = false
2020-06-11 09:37:37 +02:00
function load () {
if (loaded) {
return
}
2020-06-11 09:37:37 +02:00
loaded = true
2020-06-11 09:37:37 +02:00
// This is the number of onSignalExit's that are in play.
// It's important so that we can count the correct number of
// listeners on signals, and don't wait for the other one to
// handle it instead of us.
emitter.count += 1
2020-06-11 09:37:37 +02:00
signals = signals.filter(function (sig) {
try {
process.on(sig, sigListeners[sig])
return true
} catch (er) {
return false
}
})
2020-06-11 09:37:37 +02:00
process.emit = processEmit
process.reallyExit = processReallyExit
}
2020-06-11 09:37:37 +02:00
var originalProcessReallyExit = process.reallyExit
function processReallyExit (code) {
process.exitCode = code || 0
emit('exit', process.exitCode, null)
/* istanbul ignore next */
emit('afterexit', process.exitCode, null)
/* istanbul ignore next */
originalProcessReallyExit.call(process, process.exitCode)
}
2020-06-11 09:37:37 +02:00
var originalProcessEmit = process.emit
function processEmit (ev, arg) {
if (ev === 'exit') {
if (arg !== undefined) {
process.exitCode = arg
}
var ret = originalProcessEmit.apply(this, arguments)
emit('exit', process.exitCode, null)
/* istanbul ignore next */
emit('afterexit', process.exitCode, null)
return ret
} else {
return originalProcessEmit.apply(this, arguments)
}
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 262:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __webpack_require__(747);
const os_1 = __webpack_require__(87);
class Context {
/**
* Hydrate the context from the environment
*/
constructor() {
this.payload = {};
if (process.env.GITHUB_EVENT_PATH) {
if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
}
else {
const path = process.env.GITHUB_EVENT_PATH;
process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
}
}
this.eventName = process.env.GITHUB_EVENT_NAME;
this.sha = process.env.GITHUB_SHA;
this.ref = process.env.GITHUB_REF;
this.workflow = process.env.GITHUB_WORKFLOW;
this.action = process.env.GITHUB_ACTION;
this.actor = process.env.GITHUB_ACTOR;
}
get issue() {
const payload = this.payload;
return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
}
get repo() {
if (process.env.GITHUB_REPOSITORY) {
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
return { owner, repo };
}
if (this.payload.repository) {
return {
owner: this.payload.repository.owner.login,
repo: this.payload.repository.name
};
}
throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
}
}
exports.Context = Context;
//# sourceMappingURL=context.js.map
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 265:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = getPage
2020-06-11 09:37:37 +02:00
const deprecate = __webpack_require__(370)
const getPageLinks = __webpack_require__(577)
const HttpError = __webpack_require__(297)
2020-06-11 09:37:37 +02:00
function getPage (octokit, link, which, headers) {
deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
const url = getPageLinks(link)[which]
2020-06-11 09:37:37 +02:00
if (!url) {
const urlError = new HttpError(`No ${which} page found`, 404)
return Promise.reject(urlError)
}
2020-06-11 09:37:37 +02:00
const requestOptions = {
url,
headers: applyAcceptHeader(link, headers)
}
2020-06-11 09:37:37 +02:00
const promise = octokit.request(requestOptions)
return promise
}
2020-06-11 09:37:37 +02:00
function applyAcceptHeader (res, headers) {
const previous = res.headers && res.headers['x-github-media-type']
2020-06-11 09:37:37 +02:00
if (!previous || (headers && headers.accept)) {
return headers
}
2020-06-11 09:37:37 +02:00
headers = headers || {}
headers.accept = 'application/vnd.' + previous
.replace('; param=', '.')
.replace('; format=', '+')
2020-06-11 09:37:37 +02:00
return headers
}
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 280:
/***/ (function(module, exports) {
2020-06-11 09:37:37 +02:00
exports = module.exports = SemVer
2020-06-11 09:37:37 +02:00
var debug
/* istanbul ignore next */
if (typeof process === 'object' &&
process.env &&
process.env.NODE_DEBUG &&
/\bsemver\b/i.test(process.env.NODE_DEBUG)) {
debug = function () {
var args = Array.prototype.slice.call(arguments, 0)
args.unshift('SEMVER')
console.log.apply(console, args)
}
2020-06-11 09:37:37 +02:00
} else {
debug = function () {}
}
2020-06-11 09:37:37 +02:00
// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports.SEMVER_SPEC_VERSION = '2.0.0'
2020-06-11 09:37:37 +02:00
var MAX_LENGTH = 256
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
/* istanbul ignore next */ 9007199254740991
2020-06-11 09:37:37 +02:00
// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16
2020-06-11 09:37:37 +02:00
// The actual regexps go on exports.re
var re = exports.re = []
var src = exports.src = []
var R = 0
2020-06-11 09:37:37 +02:00
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
2020-06-11 09:37:37 +02:00
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
2020-06-11 09:37:37 +02:00
var NUMERICIDENTIFIER = R++
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
var NUMERICIDENTIFIERLOOSE = R++
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
2020-06-11 09:37:37 +02:00
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
2020-06-11 09:37:37 +02:00
var NONNUMERICIDENTIFIER = R++
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
2020-06-11 09:37:37 +02:00
// ## Main Version
// Three dot-separated numeric identifiers.
2020-06-11 09:37:37 +02:00
var MAINVERSION = R++
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')'
2020-06-11 09:37:37 +02:00
var MAINVERSIONLOOSE = R++
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')'
2020-06-11 09:37:37 +02:00
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
2020-06-11 09:37:37 +02:00
var PRERELEASEIDENTIFIER = R++
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
'|' + src[NONNUMERICIDENTIFIER] + ')'
2020-06-11 09:37:37 +02:00
var PRERELEASEIDENTIFIERLOOSE = R++
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
'|' + src[NONNUMERICIDENTIFIER] + ')'
2020-06-11 09:37:37 +02:00
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
2020-06-11 09:37:37 +02:00
var PRERELEASE = R++
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
'(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
2020-06-11 09:37:37 +02:00
var PRERELEASELOOSE = R++
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
'(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
2020-06-11 09:37:37 +02:00
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
2020-06-11 09:37:37 +02:00
var BUILDIDENTIFIER = R++
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
2020-06-11 09:37:37 +02:00
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
2020-06-11 09:37:37 +02:00
var BUILD = R++
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
'(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
2020-06-11 09:37:37 +02:00
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
2020-06-11 09:37:37 +02:00
// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups. The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.
2020-06-11 09:37:37 +02:00
var FULL = R++
var FULLPLAIN = 'v?' + src[MAINVERSION] +
src[PRERELEASE] + '?' +
src[BUILD] + '?'
2020-06-11 09:37:37 +02:00
src[FULL] = '^' + FULLPLAIN + '$'
2020-06-11 09:37:37 +02:00
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
src[PRERELEASELOOSE] + '?' +
src[BUILD] + '?'
2020-06-11 09:37:37 +02:00
var LOOSE = R++
src[LOOSE] = '^' + LOOSEPLAIN + '$'
2020-06-11 09:37:37 +02:00
var GTLT = R++
src[GTLT] = '((?:<|>)?=?)'
2020-06-11 09:37:37 +02:00
// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R++
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
var XRANGEIDENTIFIER = R++
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
2020-06-11 09:37:37 +02:00
var XRANGEPLAIN = R++
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:' + src[PRERELEASE] + ')?' +
src[BUILD] + '?' +
')?)?'
2020-06-11 09:37:37 +02:00
var XRANGEPLAINLOOSE = R++
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:' + src[PRERELEASELOOSE] + ')?' +
src[BUILD] + '?' +
')?)?'
2020-06-11 09:37:37 +02:00
var XRANGE = R++
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
var XRANGELOOSE = R++
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
2020-06-11 09:37:37 +02:00
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R++
src[COERCE] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])'
2020-06-11 09:37:37 +02:00
// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R++
src[LONETILDE] = '(?:~>?)'
2020-06-11 09:37:37 +02:00
var TILDETRIM = R++
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
var tildeTrimReplace = '$1~'
2020-06-11 09:37:37 +02:00
var TILDE = R++
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
var TILDELOOSE = R++
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
2020-06-11 09:37:37 +02:00
// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R++
src[LONECARET] = '(?:\\^)'
2020-06-11 09:37:37 +02:00
var CARETTRIM = R++
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
var caretTrimReplace = '$1^'
2020-06-11 09:37:37 +02:00
var CARET = R++
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
var CARETLOOSE = R++
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
2020-06-11 09:37:37 +02:00
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
var COMPARATOR = R++
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
2020-06-11 09:37:37 +02:00
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R++
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
2020-06-11 09:37:37 +02:00
// this one has to use the /g flag
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
var comparatorTrimReplace = '$1$2$3'
2020-06-11 09:37:37 +02:00
// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R++
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAIN] + ')' +
'\\s*$'
2020-06-11 09:37:37 +02:00
var HYPHENRANGELOOSE = R++
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s*$'
2020-06-11 09:37:37 +02:00
// Star ranges basically just allow anything at all.
var STAR = R++
src[STAR] = '(<|>)?=?\\s*\\*'
2020-06-11 09:37:37 +02:00
// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for (var i = 0; i < R; i++) {
debug(i, src[i])
if (!re[i]) {
re[i] = new RegExp(src[i])
}
}
2020-06-11 09:37:37 +02:00
exports.parse = parse
function parse (version, options) {
if (!options || typeof options !== 'object') {
options = {
loose: !!options,
includePrerelease: false
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
if (version instanceof SemVer) {
return version
}
2020-06-11 09:37:37 +02:00
if (typeof version !== 'string') {
return null
}
2020-06-11 09:37:37 +02:00
if (version.length > MAX_LENGTH) {
return null
}
2020-06-11 09:37:37 +02:00
var r = options.loose ? re[LOOSE] : re[FULL]
if (!r.test(version)) {
return null
}
2020-06-11 09:37:37 +02:00
try {
return new SemVer(version, options)
} catch (er) {
return null
}
}
2020-06-11 09:37:37 +02:00
exports.valid = valid
function valid (version, options) {
var v = parse(version, options)
return v ? v.version : null
}
2020-06-11 09:37:37 +02:00
exports.clean = clean
function clean (version, options) {
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
return s ? s.version : null
}
2020-06-11 09:37:37 +02:00
exports.SemVer = SemVer
2020-06-11 09:37:37 +02:00
function SemVer (version, options) {
if (!options || typeof options !== 'object') {
options = {
loose: !!options,
includePrerelease: false
}
}
if (version instanceof SemVer) {
if (version.loose === options.loose) {
return version
} else {
version = version.version
}
} else if (typeof version !== 'string') {
throw new TypeError('Invalid Version: ' + version)
}
2020-06-11 09:37:37 +02:00
if (version.length > MAX_LENGTH) {
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
}
2020-06-11 09:37:37 +02:00
if (!(this instanceof SemVer)) {
return new SemVer(version, options)
}
2020-06-11 09:37:37 +02:00
debug('SemVer', version, options)
this.options = options
this.loose = !!options.loose
2020-06-11 09:37:37 +02:00
var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
2020-06-11 09:37:37 +02:00
if (!m) {
throw new TypeError('Invalid Version: ' + version)
}
2020-06-11 09:37:37 +02:00
this.raw = version
2020-06-11 09:37:37 +02:00
// these are actually numbers
this.major = +m[1]
this.minor = +m[2]
this.patch = +m[3]
2020-06-11 09:37:37 +02:00
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
throw new TypeError('Invalid major version')
}
2020-06-11 09:37:37 +02:00
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
throw new TypeError('Invalid minor version')
}
2020-06-11 09:37:37 +02:00
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
throw new TypeError('Invalid patch version')
}
2020-06-11 09:37:37 +02:00
// numberify any prerelease numeric ids
if (!m[4]) {
this.prerelease = []
} else {
this.prerelease = m[4].split('.').map(function (id) {
if (/^[0-9]+$/.test(id)) {
var num = +id
if (num >= 0 && num < MAX_SAFE_INTEGER) {
return num
}
}
return id
})
}
2020-06-11 09:37:37 +02:00
this.build = m[5] ? m[5].split('.') : []
this.format()
}
2020-06-11 09:37:37 +02:00
SemVer.prototype.format = function () {
this.version = this.major + '.' + this.minor + '.' + this.patch
if (this.prerelease.length) {
this.version += '-' + this.prerelease.join('.')
}
return this.version
}
2020-06-11 09:37:37 +02:00
SemVer.prototype.toString = function () {
return this.version
}
2020-06-11 09:37:37 +02:00
SemVer.prototype.compare = function (other) {
debug('SemVer.compare', this.version, this.options, other)
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options)
}
2020-06-11 09:37:37 +02:00
return this.compareMain(other) || this.comparePre(other)
}
2020-06-11 09:37:37 +02:00
SemVer.prototype.compareMain = function (other) {
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options)
}
2020-06-11 09:37:37 +02:00
return compareIdentifiers(this.major, other.major) ||
compareIdentifiers(this.minor, other.minor) ||
compareIdentifiers(this.patch, other.patch)
}
2020-06-11 09:37:37 +02:00
SemVer.prototype.comparePre = function (other) {
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options)
}
2020-06-11 09:37:37 +02:00
// NOT having a prerelease is > having one
if (this.prerelease.length && !other.prerelease.length) {
return -1
} else if (!this.prerelease.length && other.prerelease.length) {
return 1
} else if (!this.prerelease.length && !other.prerelease.length) {
return 0
}
2020-06-11 09:37:37 +02:00
var i = 0
do {
var a = this.prerelease[i]
var b = other.prerelease[i]
debug('prerelease compare', i, a, b)
if (a === undefined && b === undefined) {
return 0
} else if (b === undefined) {
return 1
} else if (a === undefined) {
return -1
} else if (a === b) {
continue
} else {
return compareIdentifiers(a, b)
}
2020-06-11 09:37:37 +02:00
} while (++i)
}
2020-06-11 09:37:37 +02:00
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function (release, identifier) {
switch (release) {
case 'premajor':
this.prerelease.length = 0
this.patch = 0
this.minor = 0
this.major++
this.inc('pre', identifier)
break
case 'preminor':
this.prerelease.length = 0
this.patch = 0
this.minor++
this.inc('pre', identifier)
break
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0
this.inc('patch', identifier)
this.inc('pre', identifier)
break
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0) {
this.inc('patch', identifier)
}
2020-06-11 09:37:37 +02:00
this.inc('pre', identifier)
break
2020-06-11 09:37:37 +02:00
case 'major':
// If this is a pre-major version, bump up to the same major version.
// Otherwise increment major.
// 1.0.0-5 bumps to 1.0.0
// 1.1.0 bumps to 2.0.0
if (this.minor !== 0 ||
this.patch !== 0 ||
this.prerelease.length === 0) {
this.major++
}
2020-06-11 09:37:37 +02:00
this.minor = 0
this.patch = 0
this.prerelease = []
break
case 'minor':
// If this is a pre-minor version, bump up to the same minor version.
// Otherwise increment minor.
// 1.2.0-5 bumps to 1.2.0
// 1.2.1 bumps to 1.3.0
if (this.patch !== 0 || this.prerelease.length === 0) {
this.minor++
}
2020-06-11 09:37:37 +02:00
this.patch = 0
this.prerelease = []
break
case 'patch':
// If this is not a pre-release version, it will increment the patch.
// If it is a pre-release it will bump up to the same patch version.
// 1.2.0-5 patches to 1.2.0
// 1.2.0 patches to 1.2.1
if (this.prerelease.length === 0) {
this.patch++
}
2020-06-11 09:37:37 +02:00
this.prerelease = []
break
// This probably shouldn't be used publicly.
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0) {
this.prerelease = [0]
} else {
var i = this.prerelease.length
while (--i >= 0) {
if (typeof this.prerelease[i] === 'number') {
this.prerelease[i]++
i = -2
}
}
2020-06-11 09:37:37 +02:00
if (i === -1) {
// didn't increment anything
this.prerelease.push(0)
}
}
2020-06-11 09:37:37 +02:00
if (identifier) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
if (this.prerelease[0] === identifier) {
if (isNaN(this.prerelease[1])) {
this.prerelease = [identifier, 0]
}
} else {
this.prerelease = [identifier, 0]
}
}
2020-06-11 09:37:37 +02:00
break
2020-06-11 09:37:37 +02:00
default:
throw new Error('invalid increment argument: ' + release)
}
this.format()
this.raw = this.version
return this
}
2020-06-11 09:37:37 +02:00
exports.inc = inc
function inc (version, release, loose, identifier) {
if (typeof (loose) === 'string') {
identifier = loose
loose = undefined
}
2020-06-11 09:37:37 +02:00
try {
return new SemVer(version, loose).inc(release, identifier).version
} catch (er) {
return null
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
exports.diff = diff
function diff (version1, version2) {
if (eq(version1, version2)) {
return null
} else {
var v1 = parse(version1)
var v2 = parse(version2)
var prefix = ''
if (v1.prerelease.length || v2.prerelease.length) {
prefix = 'pre'
var defaultResult = 'prerelease'
}
for (var key in v1) {
if (key === 'major' || key === 'minor' || key === 'patch') {
if (v1[key] !== v2[key]) {
return prefix + key
}
}
2020-06-11 09:37:37 +02:00
}
return defaultResult // may be undefined
}
}
2020-06-11 09:37:37 +02:00
exports.compareIdentifiers = compareIdentifiers
2020-06-11 09:37:37 +02:00
var numeric = /^[0-9]+$/
function compareIdentifiers (a, b) {
var anum = numeric.test(a)
var bnum = numeric.test(b)
2020-06-11 09:37:37 +02:00
if (anum && bnum) {
a = +a
b = +b
}
2020-06-11 09:37:37 +02:00
return a === b ? 0
: (anum && !bnum) ? -1
: (bnum && !anum) ? 1
: a < b ? -1
: 1
}
2020-06-11 09:37:37 +02:00
exports.rcompareIdentifiers = rcompareIdentifiers
function rcompareIdentifiers (a, b) {
return compareIdentifiers(b, a)
}
2020-06-11 09:37:37 +02:00
exports.major = major
function major (a, loose) {
return new SemVer(a, loose).major
}
2020-06-11 09:37:37 +02:00
exports.minor = minor
function minor (a, loose) {
return new SemVer(a, loose).minor
}
2020-06-11 09:37:37 +02:00
exports.patch = patch
function patch (a, loose) {
return new SemVer(a, loose).patch
}
2020-06-11 09:37:37 +02:00
exports.compare = compare
function compare (a, b, loose) {
return new SemVer(a, loose).compare(new SemVer(b, loose))
}
2020-06-11 09:37:37 +02:00
exports.compareLoose = compareLoose
function compareLoose (a, b) {
return compare(a, b, true)
}
2020-06-11 09:37:37 +02:00
exports.rcompare = rcompare
function rcompare (a, b, loose) {
return compare(b, a, loose)
}
2020-06-11 09:37:37 +02:00
exports.sort = sort
function sort (list, loose) {
return list.sort(function (a, b) {
return exports.compare(a, b, loose)
})
}
2020-06-11 09:37:37 +02:00
exports.rsort = rsort
function rsort (list, loose) {
return list.sort(function (a, b) {
return exports.rcompare(a, b, loose)
})
}
2020-06-11 09:37:37 +02:00
exports.gt = gt
function gt (a, b, loose) {
return compare(a, b, loose) > 0
}
2020-06-11 09:37:37 +02:00
exports.lt = lt
function lt (a, b, loose) {
return compare(a, b, loose) < 0
}
2020-06-11 09:37:37 +02:00
exports.eq = eq
function eq (a, b, loose) {
return compare(a, b, loose) === 0
}
2020-06-11 09:37:37 +02:00
exports.neq = neq
function neq (a, b, loose) {
return compare(a, b, loose) !== 0
}
2020-06-11 09:37:37 +02:00
exports.gte = gte
function gte (a, b, loose) {
return compare(a, b, loose) >= 0
}
2020-06-11 09:37:37 +02:00
exports.lte = lte
function lte (a, b, loose) {
return compare(a, b, loose) <= 0
}
2020-06-11 09:37:37 +02:00
exports.cmp = cmp
function cmp (a, op, b, loose) {
switch (op) {
case '===':
if (typeof a === 'object')
a = a.version
if (typeof b === 'object')
b = b.version
return a === b
2020-06-11 09:37:37 +02:00
case '!==':
if (typeof a === 'object')
a = a.version
if (typeof b === 'object')
b = b.version
return a !== b
2020-06-11 09:37:37 +02:00
case '':
case '=':
case '==':
return eq(a, b, loose)
2020-06-11 09:37:37 +02:00
case '!=':
return neq(a, b, loose)
2020-06-11 09:37:37 +02:00
case '>':
return gt(a, b, loose)
2020-06-11 09:37:37 +02:00
case '>=':
return gte(a, b, loose)
2020-06-11 09:37:37 +02:00
case '<':
return lt(a, b, loose)
2020-06-11 09:37:37 +02:00
case '<=':
return lte(a, b, loose)
2020-06-11 09:37:37 +02:00
default:
throw new TypeError('Invalid operator: ' + op)
}
}
2020-06-11 09:37:37 +02:00
exports.Comparator = Comparator
function Comparator (comp, options) {
if (!options || typeof options !== 'object') {
options = {
loose: !!options,
includePrerelease: false
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
if (comp instanceof Comparator) {
if (comp.loose === !!options.loose) {
return comp
} else {
comp = comp.value
}
}
2020-06-11 09:37:37 +02:00
if (!(this instanceof Comparator)) {
return new Comparator(comp, options)
}
2020-06-11 09:37:37 +02:00
debug('comparator', comp, options)
this.options = options
this.loose = !!options.loose
this.parse(comp)
2020-06-11 09:37:37 +02:00
if (this.semver === ANY) {
this.value = ''
} else {
this.value = this.operator + this.semver.version
}
2020-06-11 09:37:37 +02:00
debug('comp', this)
}
2020-06-11 09:37:37 +02:00
var ANY = {}
Comparator.prototype.parse = function (comp) {
var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var m = comp.match(r)
2020-06-11 09:37:37 +02:00
if (!m) {
throw new TypeError('Invalid comparator: ' + comp)
}
2020-06-11 09:37:37 +02:00
this.operator = m[1]
if (this.operator === '=') {
this.operator = ''
}
2020-06-11 09:37:37 +02:00
// if it literally is just '>' or '' then allow anything.
if (!m[2]) {
this.semver = ANY
} else {
this.semver = new SemVer(m[2], this.options.loose)
}
}
2020-06-11 09:37:37 +02:00
Comparator.prototype.toString = function () {
return this.value
}
2020-06-11 09:37:37 +02:00
Comparator.prototype.test = function (version) {
debug('Comparator.test', version, this.options.loose)
2020-06-11 09:37:37 +02:00
if (this.semver === ANY) {
return true
}
2020-06-11 09:37:37 +02:00
if (typeof version === 'string') {
version = new SemVer(version, this.options)
}
2020-06-11 09:37:37 +02:00
return cmp(version, this.operator, this.semver, this.options)
}
2020-06-11 09:37:37 +02:00
Comparator.prototype.intersects = function (comp, options) {
if (!(comp instanceof Comparator)) {
throw new TypeError('a Comparator is required')
}
2020-06-11 09:37:37 +02:00
if (!options || typeof options !== 'object') {
options = {
loose: !!options,
includePrerelease: false
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
var rangeTmp
2020-06-11 09:37:37 +02:00
if (this.operator === '') {
rangeTmp = new Range(comp.value, options)
return satisfies(this.value, rangeTmp, options)
} else if (comp.operator === '') {
rangeTmp = new Range(this.value, options)
return satisfies(comp.semver, rangeTmp, options)
}
2020-06-11 09:37:37 +02:00
var sameDirectionIncreasing =
(this.operator === '>=' || this.operator === '>') &&
(comp.operator === '>=' || comp.operator === '>')
var sameDirectionDecreasing =
(this.operator === '<=' || this.operator === '<') &&
(comp.operator === '<=' || comp.operator === '<')
var sameSemVer = this.semver.version === comp.semver.version
var differentDirectionsInclusive =
(this.operator === '>=' || this.operator === '<=') &&
(comp.operator === '>=' || comp.operator === '<=')
var oppositeDirectionsLessThan =
cmp(this.semver, '<', comp.semver, options) &&
((this.operator === '>=' || this.operator === '>') &&
(comp.operator === '<=' || comp.operator === '<'))
var oppositeDirectionsGreaterThan =
cmp(this.semver, '>', comp.semver, options) &&
((this.operator === '<=' || this.operator === '<') &&
(comp.operator === '>=' || comp.operator === '>'))
2020-06-11 09:37:37 +02:00
return sameDirectionIncreasing || sameDirectionDecreasing ||
(sameSemVer && differentDirectionsInclusive) ||
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
}
2020-06-11 09:37:37 +02:00
exports.Range = Range
function Range (range, options) {
if (!options || typeof options !== 'object') {
options = {
loose: !!options,
includePrerelease: false
}
}
2020-06-11 09:37:37 +02:00
if (range instanceof Range) {
if (range.loose === !!options.loose &&
range.includePrerelease === !!options.includePrerelease) {
return range
} else {
return new Range(range.raw, options)
}
}
2020-06-11 09:37:37 +02:00
if (range instanceof Comparator) {
return new Range(range.value, options)
}
2020-06-11 09:37:37 +02:00
if (!(this instanceof Range)) {
return new Range(range, options)
}
2020-06-11 09:37:37 +02:00
this.options = options
this.loose = !!options.loose
this.includePrerelease = !!options.includePrerelease
2020-06-11 09:37:37 +02:00
// First, split based on boolean or ||
this.raw = range
this.set = range.split(/\s*\|\|\s*/).map(function (range) {
return this.parseRange(range.trim())
}, this).filter(function (c) {
// throw out any that are not relevant for whatever reason
return c.length
})
if (!this.set.length) {
throw new TypeError('Invalid SemVer Range: ' + range)
}
2020-06-11 09:37:37 +02:00
this.format()
}
2020-06-11 09:37:37 +02:00
Range.prototype.format = function () {
this.range = this.set.map(function (comps) {
return comps.join(' ').trim()
}).join('||').trim()
return this.range
}
2020-06-11 09:37:37 +02:00
Range.prototype.toString = function () {
return this.range
}
2020-06-11 09:37:37 +02:00
Range.prototype.parseRange = function (range) {
var loose = this.options.loose
range = range.trim()
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
range = range.replace(hr, hyphenReplace)
debug('hyphen replace', range)
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
debug('comparator trim', range, re[COMPARATORTRIM])
2020-06-11 09:37:37 +02:00
// `~ 1.2.3` => `~1.2.3`
range = range.replace(re[TILDETRIM], tildeTrimReplace)
2020-06-11 09:37:37 +02:00
// `^ 1.2.3` => `^1.2.3`
range = range.replace(re[CARETTRIM], caretTrimReplace)
2020-06-11 09:37:37 +02:00
// normalize spaces
range = range.split(/\s+/).join(' ')
2020-06-11 09:37:37 +02:00
// At this point, the range is completely trimmed and
// ready to be split into comparators.
2020-06-11 09:37:37 +02:00
var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
var set = range.split(' ').map(function (comp) {
return parseComparator(comp, this.options)
}, this).join(' ').split(/\s+/)
if (this.options.loose) {
// in loose mode, throw out any that are not valid comparators
set = set.filter(function (comp) {
return !!comp.match(compRe)
})
}
set = set.map(function (comp) {
return new Comparator(comp, this.options)
}, this)
2020-06-11 09:37:37 +02:00
return set
}
2020-06-11 09:37:37 +02:00
Range.prototype.intersects = function (range, options) {
if (!(range instanceof Range)) {
throw new TypeError('a Range is required')
}
2020-06-11 09:37:37 +02:00
return this.set.some(function (thisComparators) {
return thisComparators.every(function (thisComparator) {
return range.set.some(function (rangeComparators) {
return rangeComparators.every(function (rangeComparator) {
return thisComparator.intersects(rangeComparator, options)
})
})
})
})
}
2020-06-11 09:37:37 +02:00
// Mostly just for testing and legacy API reasons
exports.toComparators = toComparators
function toComparators (range, options) {
return new Range(range, options).set.map(function (comp) {
return comp.map(function (c) {
return c.value
}).join(' ').trim().split(' ')
})
}
2020-06-11 09:37:37 +02:00
// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator (comp, options) {
debug('comp', comp, options)
comp = replaceCarets(comp, options)
debug('caret', comp)
comp = replaceTildes(comp, options)
debug('tildes', comp)
comp = replaceXRanges(comp, options)
debug('xrange', comp)
comp = replaceStars(comp, options)
debug('stars', comp)
return comp
}
2020-06-11 09:37:37 +02:00
function isX (id) {
return !id || id.toLowerCase() === 'x' || id === '*'
}
2020-06-11 09:37:37 +02:00
// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes (comp, options) {
return comp.trim().split(/\s+/).map(function (comp) {
return replaceTilde(comp, options)
}).join(' ')
}
2020-06-11 09:37:37 +02:00
function replaceTilde (comp, options) {
var r = options.loose ? re[TILDELOOSE] : re[TILDE]
return comp.replace(r, function (_, M, m, p, pr) {
debug('tilde', comp, _, M, m, p, pr)
var ret
2020-06-11 09:37:37 +02:00
if (isX(M)) {
ret = ''
} else if (isX(m)) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
} else if (isX(p)) {
// ~1.2 == >=1.2.0 <1.3.0
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
} else if (pr) {
debug('replaceTilde pr', pr)
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + (+m + 1) + '.0'
} else {
// ~1.2.3 == >=1.2.3 <1.3.0
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'
}
2020-06-11 09:37:37 +02:00
debug('tilde return', ret)
return ret
})
}
2020-06-11 09:37:37 +02:00
// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets (comp, options) {
return comp.trim().split(/\s+/).map(function (comp) {
return replaceCaret(comp, options)
}).join(' ')
}
2020-06-11 09:37:37 +02:00
function replaceCaret (comp, options) {
debug('caret', comp, options)
var r = options.loose ? re[CARETLOOSE] : re[CARET]
return comp.replace(r, function (_, M, m, p, pr) {
debug('caret', comp, _, M, m, p, pr)
var ret
2020-06-11 09:37:37 +02:00
if (isX(M)) {
ret = ''
} else if (isX(m)) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
} else if (isX(p)) {
if (M === '0') {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
} else {
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
}
} else if (pr) {
debug('replaceCaret pr', pr)
if (M === '0') {
if (m === '0') {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + m + '.' + (+p + 1)
} else {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + M + '.' + (+m + 1) + '.0'
}
} else {
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
' <' + (+M + 1) + '.0.0'
}
} else {
2020-06-11 09:37:37 +02:00
debug('no pr')
if (M === '0') {
if (m === '0') {
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + m + '.' + (+p + 1)
} else {
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'
}
} else {
ret = '>=' + M + '.' + m + '.' + p +
' <' + (+M + 1) + '.0.0'
}
}
2020-06-11 09:37:37 +02:00
debug('caret return', ret)
return ret
})
}
2020-06-11 09:37:37 +02:00
function replaceXRanges (comp, options) {
debug('replaceXRanges', comp, options)
return comp.split(/\s+/).map(function (comp) {
return replaceXRange(comp, options)
}).join(' ')
}
2020-06-11 09:37:37 +02:00
function replaceXRange (comp, options) {
comp = comp.trim()
var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
debug('xRange', comp, ret, gtlt, M, m, p, pr)
var xM = isX(M)
var xm = xM || isX(m)
var xp = xm || isX(p)
var anyX = xp
2020-06-11 09:37:37 +02:00
if (gtlt === '=' && anyX) {
gtlt = ''
}
2020-06-11 09:37:37 +02:00
if (xM) {
if (gtlt === '>' || gtlt === '<') {
// nothing is allowed
ret = '<0.0.0'
} else {
// nothing is forbidden
ret = '*'
}
} else if (gtlt && anyX) {
// we know patch is an x, because we have any x at all.
// replace X with 0
if (xm) {
m = 0
}
p = 0
2020-06-11 09:37:37 +02:00
if (gtlt === '>') {
// >1 => >=2.0.0
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>='
if (xm) {
M = +M + 1
m = 0
p = 0
} else {
m = +m + 1
p = 0
}
} else if (gtlt === '<=') {
// <=0.7.x is actually <0.8.0, since any 0.7.x should
// pass. Similarly, <=7.x is actually <8.0.0, etc.
gtlt = '<'
if (xm) {
M = +M + 1
} else {
m = +m + 1
}
}
2020-06-11 09:37:37 +02:00
ret = gtlt + M + '.' + m + '.' + p
} else if (xm) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
} else if (xp) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
}
2020-06-11 09:37:37 +02:00
debug('xRange return', ret)
2020-06-11 09:37:37 +02:00
return ret
})
}
2020-06-11 09:37:37 +02:00
// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars (comp, options) {
debug('replaceStars', comp, options)
// Looseness is ignored here. star is always as loose as it gets!
return comp.trim().replace(re[STAR], '')
}
2020-06-11 09:37:37 +02:00
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace ($0,
from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr, tb) {
if (isX(fM)) {
from = ''
} else if (isX(fm)) {
from = '>=' + fM + '.0.0'
} else if (isX(fp)) {
from = '>=' + fM + '.' + fm + '.0'
} else {
from = '>=' + from
}
2020-06-11 09:37:37 +02:00
if (isX(tM)) {
to = ''
} else if (isX(tm)) {
to = '<' + (+tM + 1) + '.0.0'
} else if (isX(tp)) {
to = '<' + tM + '.' + (+tm + 1) + '.0'
} else if (tpr) {
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
} else {
to = '<=' + to
}
2020-06-11 09:37:37 +02:00
return (from + ' ' + to).trim()
}
2020-06-11 09:37:37 +02:00
// if ANY of the sets match ALL of its comparators, then pass
Range.prototype.test = function (version) {
if (!version) {
return false
}
2020-06-11 09:37:37 +02:00
if (typeof version === 'string') {
version = new SemVer(version, this.options)
}
2020-06-11 09:37:37 +02:00
for (var i = 0; i < this.set.length; i++) {
if (testSet(this.set[i], version, this.options)) {
return true
}
}
return false
}
2020-06-11 09:37:37 +02:00
function testSet (set, version, options) {
for (var i = 0; i < set.length; i++) {
if (!set[i].test(version)) {
return false
}
}
2020-06-11 09:37:37 +02:00
if (version.prerelease.length && !options.includePrerelease) {
// Find the set of versions that are allowed to have prereleases
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
// That should allow `1.2.3-pr.2` to pass.
// However, `1.2.4-alpha.notready` should NOT be allowed,
// even though it's within the range set by the comparators.
for (i = 0; i < set.length; i++) {
debug(set[i].semver)
if (set[i].semver === ANY) {
continue
}
2020-06-11 09:37:37 +02:00
if (set[i].semver.prerelease.length > 0) {
var allowed = set[i].semver
if (allowed.major === version.major &&
allowed.minor === version.minor &&
allowed.patch === version.patch) {
return true
}
}
}
2020-06-11 09:37:37 +02:00
// Version has a -pre, but it's not one of the ones we like.
return false
}
2020-06-11 09:37:37 +02:00
return true
}
2020-06-11 09:37:37 +02:00
exports.satisfies = satisfies
function satisfies (version, range, options) {
try {
range = new Range(range, options)
} catch (er) {
return false
}
return range.test(version)
}
2020-06-11 09:37:37 +02:00
exports.maxSatisfying = maxSatisfying
function maxSatisfying (versions, range, options) {
var max = null
var maxSV = null
try {
var rangeObj = new Range(range, options)
} catch (er) {
return null
}
versions.forEach(function (v) {
if (rangeObj.test(v)) {
// satisfies(v, range, options)
if (!max || maxSV.compare(v) === -1) {
// compare(max, v, true)
max = v
maxSV = new SemVer(max, options)
}
}
})
return max
}
2020-06-11 09:37:37 +02:00
exports.minSatisfying = minSatisfying
function minSatisfying (versions, range, options) {
var min = null
var minSV = null
try {
var rangeObj = new Range(range, options)
} catch (er) {
return null
}
versions.forEach(function (v) {
if (rangeObj.test(v)) {
// satisfies(v, range, options)
if (!min || minSV.compare(v) === 1) {
// compare(min, v, true)
min = v
minSV = new SemVer(min, options)
}
}
})
return min
}
2020-06-11 09:37:37 +02:00
exports.minVersion = minVersion
function minVersion (range, loose) {
range = new Range(range, loose)
2020-06-11 09:37:37 +02:00
var minver = new SemVer('0.0.0')
if (range.test(minver)) {
return minver
}
2020-06-11 09:37:37 +02:00
minver = new SemVer('0.0.0-0')
if (range.test(minver)) {
return minver
}
2020-06-11 09:37:37 +02:00
minver = null
for (var i = 0; i < range.set.length; ++i) {
var comparators = range.set[i]
2020-06-11 09:37:37 +02:00
comparators.forEach(function (comparator) {
// Clone to avoid manipulating the comparator's semver object.
var compver = new SemVer(comparator.semver.version)
switch (comparator.operator) {
case '>':
if (compver.prerelease.length === 0) {
compver.patch++
} else {
compver.prerelease.push(0)
}
compver.raw = compver.format()
/* fallthrough */
case '':
case '>=':
if (!minver || gt(minver, compver)) {
minver = compver
}
break
case '<':
case '<=':
/* Ignore maximum versions */
break
/* istanbul ignore next */
default:
throw new Error('Unexpected operation: ' + comparator.operator)
}
})
}
2020-06-11 09:37:37 +02:00
if (minver && range.test(minver)) {
return minver
}
return null
}
2020-06-11 09:37:37 +02:00
exports.validRange = validRange
function validRange (range, options) {
try {
// Return '*' instead of '' so that truthiness works.
// This will throw if it's invalid anyway
return new Range(range, options).range || '*'
} catch (er) {
return null
}
}
2020-06-11 09:37:37 +02:00
// Determine if version is less than all the versions possible in the range
exports.ltr = ltr
function ltr (version, range, options) {
return outside(version, range, '<', options)
}
2020-06-11 09:37:37 +02:00
// Determine if version is greater than all the versions possible in the range.
exports.gtr = gtr
function gtr (version, range, options) {
return outside(version, range, '>', options)
}
2020-06-11 09:37:37 +02:00
exports.outside = outside
function outside (version, range, hilo, options) {
version = new SemVer(version, options)
range = new Range(range, options)
2020-06-11 09:37:37 +02:00
var gtfn, ltefn, ltfn, comp, ecomp
switch (hilo) {
case '>':
gtfn = gt
ltefn = lte
ltfn = lt
comp = '>'
ecomp = '>='
break
case '<':
gtfn = lt
ltefn = gte
ltfn = gt
comp = '<'
ecomp = '<='
break
default:
throw new TypeError('Must provide a hilo val of "<" or ">"')
}
2020-06-11 09:37:37 +02:00
// If it satisifes the range it is not outside
if (satisfies(version, range, options)) {
return false
}
2020-06-11 09:37:37 +02:00
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
2020-06-11 09:37:37 +02:00
for (var i = 0; i < range.set.length; ++i) {
var comparators = range.set[i]
2020-06-11 09:37:37 +02:00
var high = null
var low = null
2020-06-11 09:37:37 +02:00
comparators.forEach(function (comparator) {
if (comparator.semver === ANY) {
comparator = new Comparator('>=0.0.0')
}
high = high || comparator
low = low || comparator
if (gtfn(comparator.semver, high.semver, options)) {
high = comparator
} else if (ltfn(comparator.semver, low.semver, options)) {
low = comparator
}
})
// If the edge version comparator has a operator then our version
// isn't outside it
if (high.operator === comp || high.operator === ecomp) {
return false
}
// If the lowest version comparator has an operator and our version
// is less than it then it isn't higher than the range
if ((!low.operator || low.operator === comp) &&
ltefn(version, low.semver)) {
return false
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
return false
}
}
return true
}
2020-06-11 09:37:37 +02:00
exports.prerelease = prerelease
function prerelease (version, options) {
var parsed = parse(version, options)
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
}
2020-06-11 09:37:37 +02:00
exports.intersects = intersects
function intersects (r1, r2, options) {
r1 = new Range(r1, options)
r2 = new Range(r2, options)
return r1.intersects(r2)
}
2020-06-11 09:37:37 +02:00
exports.coerce = coerce
function coerce (version) {
if (version instanceof SemVer) {
return version
}
2020-06-11 09:37:37 +02:00
if (typeof version !== 'string') {
return null
}
2020-06-11 09:37:37 +02:00
var match = version.match(re[COERCE])
2020-06-11 09:37:37 +02:00
if (match == null) {
return null
}
2020-06-11 09:37:37 +02:00
return parse(match[1] +
'.' + (match[2] || '0') +
'.' + (match[3] || '0'))
}
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 290:
/***/ (function(module) {
"use strict";
2020-06-11 09:37:37 +02:00
class QuickLRU {
constructor(options = {}) {
if (!(options.maxSize && options.maxSize > 0)) {
throw new TypeError('`maxSize` must be a number greater than 0');
}
2020-06-11 09:37:37 +02:00
this.maxSize = options.maxSize;
this.onEviction = options.onEviction;
this.cache = new Map();
this.oldCache = new Map();
this._size = 0;
}
2020-06-11 09:37:37 +02:00
_set(key, value) {
this.cache.set(key, value);
this._size++;
2020-06-11 09:37:37 +02:00
if (this._size >= this.maxSize) {
this._size = 0;
2020-06-11 09:37:37 +02:00
if (typeof this.onEviction === 'function') {
for (const [key, value] of this.oldCache.entries()) {
this.onEviction(key, value);
}
}
2020-06-11 09:37:37 +02:00
this.oldCache = this.cache;
this.cache = new Map();
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
get(key) {
if (this.cache.has(key)) {
return this.cache.get(key);
}
2020-06-11 09:37:37 +02:00
if (this.oldCache.has(key)) {
const value = this.oldCache.get(key);
this.oldCache.delete(key);
this._set(key, value);
return value;
}
}
2020-06-11 09:37:37 +02:00
set(key, value) {
if (this.cache.has(key)) {
this.cache.set(key, value);
} else {
this._set(key, value);
}
return this;
}
2020-06-11 09:37:37 +02:00
has(key) {
return this.cache.has(key) || this.oldCache.has(key);
}
2020-06-11 09:37:37 +02:00
peek(key) {
if (this.cache.has(key)) {
return this.cache.get(key);
}
if (this.oldCache.has(key)) {
return this.oldCache.get(key);
}
}
2020-06-11 09:37:37 +02:00
delete(key) {
const deleted = this.cache.delete(key);
if (deleted) {
this._size--;
}
return this.oldCache.delete(key) || deleted;
}
2020-06-11 09:37:37 +02:00
clear() {
this.cache.clear();
this.oldCache.clear();
this._size = 0;
}
2020-06-11 09:37:37 +02:00
* keys() {
for (const [key] of this) {
yield key;
}
}
2020-06-11 09:37:37 +02:00
* values() {
for (const [, value] of this) {
yield value;
}
2020-06-11 09:37:37 +02:00
}
* [Symbol.iterator]() {
for (const item of this.cache) {
yield item;
}
2020-06-11 09:37:37 +02:00
for (const item of this.oldCache) {
const [key] = item;
if (!this.cache.has(key)) {
yield item;
}
}
}
2020-06-11 09:37:37 +02:00
get size() {
let oldCacheSize = 0;
for (const key of this.oldCache.keys()) {
if (!this.cache.has(key)) {
oldCacheSize++;
}
}
2020-06-11 09:37:37 +02:00
return Math.min(this._size + oldCacheSize, this.maxSize);
}
}
2020-06-11 09:37:37 +02:00
module.exports = QuickLRU;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 291:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __webpack_require__(534);
function deepFreeze(object) {
for (const value of Object.values(object)) {
if (is_1.default.plainObject(value) || is_1.default.array(value)) {
deepFreeze(value);
}
}
return Object.freeze(object);
}
2020-06-11 09:37:37 +02:00
exports.default = deepFreeze;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 293:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = authenticationRequestError;
2020-06-11 09:37:37 +02:00
const { RequestError } = __webpack_require__(463);
2020-06-11 09:37:37 +02:00
function authenticationRequestError(state, error, options) {
if (!error.headers) throw error;
2020-06-11 09:37:37 +02:00
const otpRequired = /required/.test(error.headers["x-github-otp"] || "");
// handle "2FA required" error only
if (error.status !== 401 || !otpRequired) {
throw error;
}
2020-06-11 09:37:37 +02:00
if (
error.status === 401 &&
otpRequired &&
error.request &&
error.request.headers["x-github-otp"]
) {
if (state.otp) {
delete state.otp; // no longer valid, request again
} else {
throw new RequestError(
"Invalid one-time password for two-factor authentication",
401,
{
headers: error.headers,
request: options
}
);
}
}
2020-06-11 09:37:37 +02:00
if (typeof state.auth.on2fa !== "function") {
throw new RequestError(
"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication",
401,
{
headers: error.headers,
request: options
}
);
}
return Promise.resolve()
.then(() => {
return state.auth.on2fa();
})
.then(oneTimePassword => {
const newOptions = Object.assign(options, {
headers: Object.assign(options.headers, {
"x-github-otp": oneTimePassword
})
});
return state.octokit.request(newOptions).then(response => {
// If OTP still valid, then persist it for following requests
state.otp = oneTimePassword;
return response;
});
});
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 294:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = parseOptions;
2020-06-11 09:37:37 +02:00
const { Deprecation } = __webpack_require__(692);
const { getUserAgent } = __webpack_require__(619);
const once = __webpack_require__(969);
2020-06-11 09:37:37 +02:00
const pkg = __webpack_require__(215);
2020-06-11 09:37:37 +02:00
const deprecateOptionsTimeout = once((log, deprecation) =>
log.warn(deprecation)
);
const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation));
const deprecateOptionsHeaders = once((log, deprecation) =>
log.warn(deprecation)
);
2020-06-11 09:37:37 +02:00
function parseOptions(options, log, hook) {
if (options.headers) {
options.headers = Object.keys(options.headers).reduce((newObj, key) => {
newObj[key.toLowerCase()] = options.headers[key];
return newObj;
}, {});
}
2020-06-11 09:37:37 +02:00
const clientDefaults = {
headers: options.headers || {},
request: options.request || {},
mediaType: {
previews: [],
format: ""
}
};
2020-06-11 09:37:37 +02:00
if (options.baseUrl) {
clientDefaults.baseUrl = options.baseUrl;
}
2020-06-11 09:37:37 +02:00
if (options.userAgent) {
clientDefaults.headers["user-agent"] = options.userAgent;
}
2020-06-11 09:37:37 +02:00
if (options.previews) {
clientDefaults.mediaType.previews = options.previews;
}
2020-06-11 09:37:37 +02:00
if (options.timeZone) {
clientDefaults.headers["time-zone"] = options.timeZone;
}
2020-06-11 09:37:37 +02:00
if (options.timeout) {
deprecateOptionsTimeout(
log,
new Deprecation(
"[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request"
)
);
clientDefaults.request.timeout = options.timeout;
}
2020-06-11 09:37:37 +02:00
if (options.agent) {
deprecateOptionsAgent(
log,
new Deprecation(
"[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request"
)
);
clientDefaults.request.agent = options.agent;
}
2020-06-11 09:37:37 +02:00
if (options.headers) {
deprecateOptionsHeaders(
log,
new Deprecation(
"[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request"
)
);
}
2020-06-11 09:37:37 +02:00
const userAgentOption = clientDefaults.headers["user-agent"];
const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`;
2020-06-11 09:37:37 +02:00
clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent]
.filter(Boolean)
.join(" ");
2020-06-11 09:37:37 +02:00
clientDefaults.request.hook = hook.bind(null, "request");
2020-06-11 09:37:37 +02:00
return clientDefaults;
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 297:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = class HttpError extends Error {
constructor (message, code, headers) {
super(message)
2020-06-11 09:37:37 +02:00
// Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor)
}
2020-06-11 09:37:37 +02:00
this.name = 'HttpError'
this.code = code
this.headers = headers
}
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 299:
/***/ (function(__unusedmodule, exports) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, '__esModule', { value: true });
const VERSION = "1.1.2";
/**
2020-06-11 09:37:37 +02:00
* Some list response that can be paginated have a different response structure
*
2020-06-11 09:37:37 +02:00
* They have a `total_count` key in the response (search also has `incomplete_results`,
* /installation/repositories also has `repository_selection`), as well as a key with
* the list of the items which name varies from endpoint to endpoint:
*
* - https://developer.github.com/v3/search/#example (key `items`)
* - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`)
* - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`)
* - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`)
* - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`)
*
* Octokit normalizes these responses so that paginated results are always returned following
* the same structure. One challenge is that if the list response has only one page, no Link
* header is provided, so this header alone is not sufficient to check wether a response is
* paginated or not. For the exceptions with the namespace, a fallback check for the route
* paths has to be added in order to normalize the response. We cannot check for the total_count
* property because it also exists in the response of Get the combined status for a specific ref.
*/
2020-06-11 09:37:37 +02:00
const REGEX = [/^\/search\//, /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)([^/]|$)/, /^\/installation\/repositories([^/]|$)/, /^\/user\/installations([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/secrets([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/workflows(\/[^/]+\/runs)?([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/runs(\/[^/]+\/(artifacts|jobs))?([^/]|$)/];
function normalizePaginatedListResponse(octokit, url, response) {
const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, "");
const responseNeedsNormalization = REGEX.find(regex => regex.test(path));
if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way
// to retrieve the same information.
2020-06-11 09:37:37 +02:00
const incompleteResults = response.data.incomplete_results;
const repositorySelection = response.data.repository_selection;
const totalCount = response.data.total_count;
delete response.data.incomplete_results;
delete response.data.repository_selection;
delete response.data.total_count;
const namespaceKey = Object.keys(response.data)[0];
const data = response.data[namespaceKey];
response.data = data;
2020-06-11 09:37:37 +02:00
if (typeof incompleteResults !== "undefined") {
response.data.incomplete_results = incompleteResults;
}
2020-06-11 09:37:37 +02:00
if (typeof repositorySelection !== "undefined") {
response.data.repository_selection = repositorySelection;
}
2020-06-11 09:37:37 +02:00
response.data.total_count = totalCount;
Object.defineProperty(response.data, namespaceKey, {
get() {
octokit.log.warn(`[@octokit/paginate-rest] "response.data.${namespaceKey}" is deprecated for "GET ${path}". Get the results directly from "response.data"`);
return Array.from(data);
}
2020-06-11 09:37:37 +02:00
});
}
2020-06-11 09:37:37 +02:00
function iterator(octokit, route, parameters) {
const options = octokit.request.endpoint(route, parameters);
const method = options.method;
const headers = options.headers;
let url = options.url;
return {
[Symbol.asyncIterator]: () => ({
next() {
if (!url) {
return Promise.resolve({
done: true
});
}
2020-06-11 09:37:37 +02:00
return octokit.request({
method,
url,
headers
}).then(response => {
normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format:
// '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
// sets `url` to undefined if "next" URL is not present or `link` header is not set
2020-06-11 09:37:37 +02:00
url = ((response.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
return {
value: response
};
});
}
2020-06-11 09:37:37 +02:00
})
};
}
2020-06-11 09:37:37 +02:00
function paginate(octokit, route, parameters, mapFn) {
if (typeof parameters === "function") {
mapFn = parameters;
parameters = undefined;
}
2020-06-11 09:37:37 +02:00
return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
}
2020-06-11 09:37:37 +02:00
function gather(octokit, results, iterator, mapFn) {
return iterator.next().then(result => {
if (result.done) {
return results;
}
2020-06-11 09:37:37 +02:00
let earlyExit = false;
2020-06-11 09:37:37 +02:00
function done() {
earlyExit = true;
}
2020-06-11 09:37:37 +02:00
results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
2020-06-11 09:37:37 +02:00
if (earlyExit) {
return results;
}
2020-06-11 09:37:37 +02:00
return gather(octokit, results, iterator, mapFn);
});
}
/**
2020-06-11 09:37:37 +02:00
* @param octokit Octokit instance
* @param options Options passed to Octokit constructor
*/
2020-06-11 09:37:37 +02:00
function paginateRest(octokit) {
return {
paginate: Object.assign(paginate.bind(null, octokit), {
iterator: iterator.bind(null, octokit)
})
};
}
2020-06-11 09:37:37 +02:00
paginateRest.VERSION = VERSION;
2020-06-11 09:37:37 +02:00
exports.paginateRest = paginateRest;
//# sourceMappingURL=index.js.map
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 303:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const EventEmitter = __webpack_require__(614);
const JSONB = __webpack_require__(205);
2020-06-11 09:37:37 +02:00
const loadStore = opts => {
const adapters = {
redis: '@keyv/redis',
mongodb: '@keyv/mongo',
mongo: '@keyv/mongo',
sqlite: '@keyv/sqlite',
postgresql: '@keyv/postgres',
postgres: '@keyv/postgres',
mysql: '@keyv/mysql'
};
if (opts.adapter || opts.uri) {
const adapter = opts.adapter || /^[^:]*/.exec(opts.uri)[0];
return new (require(adapters[adapter]))(opts);
}
2020-06-11 09:37:37 +02:00
return new Map();
};
class Keyv extends EventEmitter {
constructor(uri, opts) {
super();
this.opts = Object.assign(
{
namespace: 'keyv',
serialize: JSONB.stringify,
deserialize: JSONB.parse
},
(typeof uri === 'string') ? { uri } : uri,
opts
);
if (!this.opts.store) {
const adapterOpts = Object.assign({}, this.opts);
this.opts.store = loadStore(adapterOpts);
}
2020-06-11 09:37:37 +02:00
if (typeof this.opts.store.on === 'function') {
this.opts.store.on('error', err => this.emit('error', err));
}
2020-06-11 09:37:37 +02:00
this.opts.store.namespace = this.opts.namespace;
}
2020-06-11 09:37:37 +02:00
_getKeyPrefix(key) {
return `${this.opts.namespace}:${key}`;
}
2020-06-11 09:37:37 +02:00
get(key, opts) {
const keyPrefixed = this._getKeyPrefix(key);
const { store } = this.opts;
return Promise.resolve()
.then(() => store.get(keyPrefixed))
.then(data => {
return (typeof data === 'string') ? this.opts.deserialize(data) : data;
})
.then(data => {
if (data === undefined) {
return undefined;
}
2020-06-11 09:37:37 +02:00
if (typeof data.expires === 'number' && Date.now() > data.expires) {
this.delete(key);
return undefined;
}
2020-06-11 09:37:37 +02:00
return (opts && opts.raw) ? data : data.value;
});
}
2020-06-11 09:37:37 +02:00
set(key, value, ttl) {
const keyPrefixed = this._getKeyPrefix(key);
if (typeof ttl === 'undefined') {
ttl = this.opts.ttl;
}
2020-06-11 09:37:37 +02:00
if (ttl === 0) {
ttl = undefined;
}
2020-06-11 09:37:37 +02:00
const { store } = this.opts;
return Promise.resolve()
.then(() => {
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;
value = { value, expires };
return this.opts.serialize(value);
})
.then(value => store.set(keyPrefixed, value, ttl))
.then(() => true);
}
2020-06-11 09:37:37 +02:00
delete(key) {
const keyPrefixed = this._getKeyPrefix(key);
const { store } = this.opts;
return Promise.resolve()
.then(() => store.delete(keyPrefixed));
}
2020-06-11 09:37:37 +02:00
clear() {
const { store } = this.opts;
return Promise.resolve()
.then(() => store.clear());
}
2020-06-11 09:37:37 +02:00
}
2020-06-11 09:37:37 +02:00
module.exports = Keyv;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 323:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
var isStream = module.exports = function (stream) {
return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
};
2020-06-11 09:37:37 +02:00
isStream.writable = function (stream) {
return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
};
2020-06-11 09:37:37 +02:00
isStream.readable = function (stream) {
return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
};
2020-06-11 09:37:37 +02:00
isStream.duplex = function (stream) {
return isStream.writable(stream) && isStream.readable(stream);
};
2020-06-11 09:37:37 +02:00
isStream.transform = function (stream) {
return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 325:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const PassThrough = __webpack_require__(413).PassThrough;
const mimicResponse = __webpack_require__(210);
2020-06-11 09:37:37 +02:00
const cloneResponse = response => {
if (!(response && response.pipe)) {
throw new TypeError('Parameter `response` must be a response stream.');
}
2020-06-11 09:37:37 +02:00
const clone = new PassThrough();
mimicResponse(response, clone);
2020-06-11 09:37:37 +02:00
return response.pipe(clone);
};
2020-06-11 09:37:37 +02:00
module.exports = cloneResponse;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 336:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = hasLastPage
2020-06-11 09:37:37 +02:00
const deprecate = __webpack_require__(370)
const getPageLinks = __webpack_require__(577)
2020-06-11 09:37:37 +02:00
function hasLastPage (link) {
deprecate(`octokit.hasLastPage() You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
return getPageLinks(link).last
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 348:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
module.exports = validate;
2020-06-11 09:37:37 +02:00
const { RequestError } = __webpack_require__(463);
const get = __webpack_require__(854);
const set = __webpack_require__(883);
2020-06-11 09:37:37 +02:00
function validate(octokit, options) {
if (!options.request.validate) {
return;
}
const { validate: params } = options.request;
2020-06-11 09:37:37 +02:00
Object.keys(params).forEach(parameterName => {
const parameter = get(params, parameterName);
2020-06-11 09:37:37 +02:00
const expectedType = parameter.type;
let parentParameterName;
let parentValue;
let parentParamIsPresent = true;
let parentParameterIsArray = false;
2020-06-11 09:37:37 +02:00
if (/\./.test(parameterName)) {
parentParameterName = parameterName.replace(/\.[^.]+$/, "");
parentParameterIsArray = parentParameterName.slice(-2) === "[]";
if (parentParameterIsArray) {
parentParameterName = parentParameterName.slice(0, -2);
}
parentValue = get(options, parentParameterName);
parentParamIsPresent =
parentParameterName === "headers" ||
(typeof parentValue === "object" && parentValue !== null);
}
2020-06-11 09:37:37 +02:00
const values = parentParameterIsArray
? (get(options, parentParameterName) || []).map(
value => value[parameterName.split(/\./).pop()]
)
: [get(options, parameterName)];
2020-06-11 09:37:37 +02:00
values.forEach((value, i) => {
const valueIsPresent = typeof value !== "undefined";
const valueIsNull = value === null;
const currentParameterName = parentParameterIsArray
? parameterName.replace(/\[\]/, `[${i}]`)
: parameterName;
2020-06-11 09:37:37 +02:00
if (!parameter.required && !valueIsPresent) {
return;
}
2020-06-11 09:37:37 +02:00
// if the parent parameter is of type object but allows null
// then the child parameters can be ignored
if (!parentParamIsPresent) {
return;
}
2020-06-11 09:37:37 +02:00
if (parameter.allowNull && valueIsNull) {
return;
}
2020-06-11 09:37:37 +02:00
if (!parameter.allowNull && valueIsNull) {
throw new RequestError(
`'${currentParameterName}' cannot be null`,
400,
{
request: options
}
);
}
2020-06-11 09:37:37 +02:00
if (parameter.required && !valueIsPresent) {
throw new RequestError(
`Empty value for parameter '${currentParameterName}': ${JSON.stringify(
value
)}`,
400,
{
request: options
}
);
}
2020-06-11 09:37:37 +02:00
// parse to integer before checking for enum
// so that string "1" will match enum with number 1
if (expectedType === "integer") {
const unparsedValue = value;
value = parseInt(value, 10);
if (isNaN(value)) {
throw new RequestError(
`Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
unparsedValue
)} is NaN`,
400,
{
request: options
}
);
}
}
2020-06-11 09:37:37 +02:00
if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) {
throw new RequestError(
`Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
value
)}`,
400,
{
request: options
}
);
}
2020-06-11 09:37:37 +02:00
if (parameter.validation) {
const regex = new RegExp(parameter.validation);
if (!regex.test(value)) {
throw new RequestError(
`Invalid value for parameter '${currentParameterName}': ${JSON.stringify(
value
)}`,
400,
{
request: options
}
);
}
}
2020-06-11 09:37:37 +02:00
if (expectedType === "object" && typeof value === "string") {
try {
value = JSON.parse(value);
} catch (exception) {
throw new RequestError(
`JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify(
value
)}`,
400,
{
request: options
}
);
}
}
2020-06-11 09:37:37 +02:00
set(options, parameter.mapTo || currentParameterName, value);
});
});
2020-06-11 09:37:37 +02:00
return options;
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 349:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = authenticationRequestError;
2020-06-11 09:37:37 +02:00
const { RequestError } = __webpack_require__(463);
2020-06-11 09:37:37 +02:00
function authenticationRequestError(state, error, options) {
/* istanbul ignore next */
if (!error.headers) throw error;
2020-06-11 09:37:37 +02:00
const otpRequired = /required/.test(error.headers["x-github-otp"] || "");
// handle "2FA required" error only
if (error.status !== 401 || !otpRequired) {
throw error;
}
2020-06-11 09:37:37 +02:00
if (
error.status === 401 &&
otpRequired &&
error.request &&
error.request.headers["x-github-otp"]
) {
throw new RequestError(
"Invalid one-time password for two-factor authentication",
401,
{
headers: error.headers,
request: options
}
);
}
2020-06-11 09:37:37 +02:00
if (typeof state.auth.on2fa !== "function") {
throw new RequestError(
"2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication",
401,
{
headers: error.headers,
request: options
}
);
}
2020-06-11 09:37:37 +02:00
return Promise.resolve()
.then(() => {
return state.auth.on2fa();
})
.then(oneTimePassword => {
const newOptions = Object.assign(options, {
headers: Object.assign(
{ "x-github-otp": oneTimePassword },
options.headers
)
});
return state.octokit.request(newOptions);
});
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 357:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = require("assert");
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 363:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = register
2020-06-11 09:37:37 +02:00
function register (state, name, method, options) {
if (typeof method !== 'function') {
throw new Error('method for before hook must be a function')
}
2020-06-11 09:37:37 +02:00
if (!options) {
options = {}
}
2020-06-11 09:37:37 +02:00
if (Array.isArray(name)) {
return name.reverse().reduce(function (callback, name) {
return register.bind(null, state, name, callback, options)
}, method)()
}
2020-06-11 09:37:37 +02:00
return Promise.resolve()
.then(function () {
if (!state.registry[name]) {
return method(options)
}
2020-06-11 09:37:37 +02:00
return (state.registry[name]).reduce(function (method, registered) {
return registered.hook.bind(null, method, options)
}, method)()
})
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 368:
/***/ (function(module) {
module.exports = function atob(str) {
return Buffer.from(str, 'base64').toString('binary')
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 370:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
module.exports = deprecate
2020-06-11 09:37:37 +02:00
const loggedMessages = {}
2020-06-11 09:37:37 +02:00
function deprecate (message) {
if (loggedMessages[message]) {
return
}
2020-06-11 09:37:37 +02:00
console.warn(`DEPRECATED (@octokit/rest): ${message}`)
loggedMessages[message] = 1
}
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 385:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, '__esModule', { value: true });
2020-06-11 09:37:37 +02:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2020-06-11 09:37:37 +02:00
var isPlainObject = _interopDefault(__webpack_require__(696));
var universalUserAgent = __webpack_require__(796);
2020-06-11 09:37:37 +02:00
function lowercaseKeys(object) {
if (!object) {
return {};
}
2020-06-11 09:37:37 +02:00
return Object.keys(object).reduce((newObj, key) => {
newObj[key.toLowerCase()] = object[key];
return newObj;
}, {});
}
2020-06-11 09:37:37 +02:00
function mergeDeep(defaults, options) {
const result = Object.assign({}, defaults);
Object.keys(options).forEach(key => {
if (isPlainObject(options[key])) {
if (!(key in defaults)) Object.assign(result, {
[key]: options[key]
});else result[key] = mergeDeep(defaults[key], options[key]);
} else {
Object.assign(result, {
[key]: options[key]
});
}
});
return result;
}
2020-06-11 09:37:37 +02:00
function merge(defaults, route, options) {
if (typeof route === "string") {
let [method, url] = route.split(" ");
options = Object.assign(url ? {
method,
url
} : {
url: method
}, options);
} else {
options = Object.assign({}, route);
} // lowercase header names before merging with defaults to avoid duplicates
2020-06-11 09:37:37 +02:00
options.headers = lowercaseKeys(options.headers);
const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
2020-06-11 09:37:37 +02:00
if (defaults && defaults.mediaType.previews.length) {
mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
}
2020-06-11 09:37:37 +02:00
mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
return mergedOptions;
}
2020-06-11 09:37:37 +02:00
function addQueryParameters(url, parameters) {
const separator = /\?/.test(url) ? "&" : "?";
const names = Object.keys(parameters);
2020-06-11 09:37:37 +02:00
if (names.length === 0) {
return url;
}
2020-06-11 09:37:37 +02:00
return url + separator + names.map(name => {
if (name === "q") {
return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
}
2020-06-11 09:37:37 +02:00
return `${name}=${encodeURIComponent(parameters[name])}`;
}).join("&");
}
2020-06-11 09:37:37 +02:00
const urlVariableRegex = /\{[^}]+\}/g;
2020-06-11 09:37:37 +02:00
function removeNonChars(variableName) {
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
}
2020-06-11 09:37:37 +02:00
function extractUrlVariableNames(url) {
const matches = url.match(urlVariableRegex);
2020-06-11 09:37:37 +02:00
if (!matches) {
return [];
}
2020-06-11 09:37:37 +02:00
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
}
2020-06-11 09:37:37 +02:00
function omit(object, keysToOmit) {
return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
obj[key] = object[key];
return obj;
}, {});
}
2020-06-11 09:37:37 +02:00
// Based on https://github.com/bramstein/url-template, licensed under BSD
// TODO: create separate package.
//
// Copyright (c) 2012-2014, Bram Stein
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
// derived from this software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2020-06-11 09:37:37 +02:00
/* istanbul ignore file */
function encodeReserved(str) {
return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
if (!/%[0-9A-Fa-f]/.test(part)) {
part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
}
2020-06-11 09:37:37 +02:00
return part;
}).join("");
}
2020-06-11 09:37:37 +02:00
function encodeUnreserved(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
});
}
2020-06-11 09:37:37 +02:00
function encodeValue(operator, value, key) {
value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
2020-06-11 09:37:37 +02:00
if (key) {
return encodeUnreserved(key) + "=" + value;
} else {
return value;
}
}
2020-06-11 09:37:37 +02:00
function isDefined(value) {
return value !== undefined && value !== null;
}
2020-06-11 09:37:37 +02:00
function isKeyOperator(operator) {
return operator === ";" || operator === "&" || operator === "?";
}
2020-06-11 09:37:37 +02:00
function getValues(context, operator, key, modifier) {
var value = context[key],
result = [];
2020-06-11 09:37:37 +02:00
if (isDefined(value) && value !== "") {
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
value = value.toString();
2020-06-11 09:37:37 +02:00
if (modifier && modifier !== "*") {
value = value.substring(0, parseInt(modifier, 10));
}
2020-06-11 09:37:37 +02:00
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
} else {
if (modifier === "*") {
if (Array.isArray(value)) {
value.filter(isDefined).forEach(function (value) {
result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
});
} else {
Object.keys(value).forEach(function (k) {
if (isDefined(value[k])) {
result.push(encodeValue(operator, value[k], k));
}
});
}
} else {
const tmp = [];
2020-06-11 09:37:37 +02:00
if (Array.isArray(value)) {
value.filter(isDefined).forEach(function (value) {
tmp.push(encodeValue(operator, value));
});
} else {
Object.keys(value).forEach(function (k) {
if (isDefined(value[k])) {
tmp.push(encodeUnreserved(k));
tmp.push(encodeValue(operator, value[k].toString()));
}
});
}
2020-06-11 09:37:37 +02:00
if (isKeyOperator(operator)) {
result.push(encodeUnreserved(key) + "=" + tmp.join(","));
} else if (tmp.length !== 0) {
result.push(tmp.join(","));
}
}
}
} else {
if (operator === ";") {
if (isDefined(value)) {
result.push(encodeUnreserved(key));
}
} else if (value === "" && (operator === "&" || operator === "?")) {
result.push(encodeUnreserved(key) + "=");
} else if (value === "") {
result.push("");
}
}
2020-06-11 09:37:37 +02:00
return result;
}
2020-06-11 09:37:37 +02:00
function parseUrl(template) {
return {
expand: expand.bind(null, template)
};
}
2020-06-11 09:37:37 +02:00
function expand(template, context) {
var operators = ["+", "#", ".", "/", ";", "?", "&"];
return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
if (expression) {
let operator = "";
const values = [];
2020-06-11 09:37:37 +02:00
if (operators.indexOf(expression.charAt(0)) !== -1) {
operator = expression.charAt(0);
expression = expression.substr(1);
}
2020-06-11 09:37:37 +02:00
expression.split(/,/g).forEach(function (variable) {
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
});
2020-06-11 09:37:37 +02:00
if (operator && operator !== "+") {
var separator = ",";
2020-06-11 09:37:37 +02:00
if (operator === "?") {
separator = "&";
} else if (operator !== "#") {
separator = operator;
}
2020-06-11 09:37:37 +02:00
return (values.length !== 0 ? operator : "") + values.join(separator);
} else {
return values.join(",");
}
} else {
return encodeReserved(literal);
}
2020-06-11 09:37:37 +02:00
});
}
2020-06-11 09:37:37 +02:00
function parse(options) {
// https://fetch.spec.whatwg.org/#methods
let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
2020-06-11 09:37:37 +02:00
let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}");
let headers = Object.assign({}, options.headers);
let body;
let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
2020-06-11 09:37:37 +02:00
const urlVariableNames = extractUrlVariableNames(url);
url = parseUrl(url).expand(parameters);
2020-06-11 09:37:37 +02:00
if (!/^http/.test(url)) {
url = options.baseUrl + url;
}
2020-06-11 09:37:37 +02:00
const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
const remainingParameters = omit(parameters, omittedParameters);
const isBinaryRequset = /application\/octet-stream/i.test(headers.accept);
2020-06-11 09:37:37 +02:00
if (!isBinaryRequset) {
if (options.mediaType.format) {
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
}
2020-06-11 09:37:37 +02:00
if (options.mediaType.previews.length) {
const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
return `application/vnd.github.${preview}-preview${format}`;
}).join(",");
}
} // for GET/HEAD requests, set URL query parameters from remaining parameters
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
2020-06-11 09:37:37 +02:00
if (["GET", "HEAD"].includes(method)) {
url = addQueryParameters(url, remainingParameters);
} else {
if ("data" in remainingParameters) {
body = remainingParameters.data;
} else {
if (Object.keys(remainingParameters).length) {
body = remainingParameters;
} else {
headers["content-length"] = 0;
}
}
} // default content-type for JSON if body is set
2020-06-11 09:37:37 +02:00
if (!headers["content-type"] && typeof body !== "undefined") {
headers["content-type"] = "application/json; charset=utf-8";
} // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
// fetch does not allow to set `content-length` header, but we can set body to an empty string
2020-06-11 09:37:37 +02:00
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
body = "";
} // Only return body/request keys if present
2020-06-11 09:37:37 +02:00
return Object.assign({
method,
url,
headers
}, typeof body !== "undefined" ? {
body
} : null, options.request ? {
request: options.request
} : null);
}
2020-06-11 09:37:37 +02:00
function endpointWithDefaults(defaults, route, options) {
return parse(merge(defaults, route, options));
}
2020-06-11 09:37:37 +02:00
function withDefaults(oldDefaults, newDefaults) {
const DEFAULTS = merge(oldDefaults, newDefaults);
const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
return Object.assign(endpoint, {
DEFAULTS,
defaults: withDefaults.bind(null, DEFAULTS),
merge: merge.bind(null, DEFAULTS),
parse
});
}
2020-06-11 09:37:37 +02:00
const VERSION = "6.0.3";
const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
// So we use RequestParameters and add method as additional required property.
const DEFAULTS = {
method: "GET",
baseUrl: "https://api.github.com",
headers: {
accept: "application/vnd.github.v3+json",
"user-agent": userAgent
},
mediaType: {
format: "",
previews: []
}
};
const endpoint = withDefaults(null, DEFAULTS);
exports.endpoint = endpoint;
//# sourceMappingURL=index.js.map
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 389:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
2020-06-11 09:37:37 +02:00
const fs = __webpack_require__(747);
const shebangCommand = __webpack_require__(866);
2020-06-11 09:37:37 +02:00
function readShebang(command) {
// Read the first 150 bytes from the file
const size = 150;
let buffer;
2020-06-11 09:37:37 +02:00
if (Buffer.alloc) {
// Node.js v4.5+ / v5.10+
buffer = Buffer.alloc(size);
} else {
// Old Node.js API
buffer = new Buffer(size);
buffer.fill(0); // zero-fill
}
let fd;
try {
fd = fs.openSync(command, 'r');
fs.readSync(fd, buffer, 0, size, 0);
fs.closeSync(fd);
} catch (e) { /* Empty */ }
// Attempt to extract shebang (null is returned if not a shebang)
return shebangCommand(buffer.toString());
}
module.exports = readShebang;
/***/ }),
/***/ 390:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const EventEmitter = __webpack_require__(614);
const urlLib = __webpack_require__(835);
const normalizeUrl = __webpack_require__(53);
const getStream = __webpack_require__(145);
const CachePolicy = __webpack_require__(154);
const Response = __webpack_require__(93);
const lowercaseKeys = __webpack_require__(474);
const cloneResponse = __webpack_require__(325);
const Keyv = __webpack_require__(303);
class CacheableRequest {
constructor(request, cacheAdapter) {
if (typeof request !== 'function') {
throw new TypeError('Parameter `request` must be a function');
}
this.cache = new Keyv({
uri: typeof cacheAdapter === 'string' && cacheAdapter,
store: typeof cacheAdapter !== 'string' && cacheAdapter,
namespace: 'cacheable-request'
});
return this.createCacheableRequest(request);
}
createCacheableRequest(request) {
return (opts, cb) => {
let url;
if (typeof opts === 'string') {
url = normalizeUrlObject(urlLib.parse(opts));
opts = {};
} else if (opts instanceof urlLib.URL) {
url = normalizeUrlObject(urlLib.parse(opts.toString()));
opts = {};
} else {
const [pathname, ...searchParts] = (opts.path || '').split('?');
const search = searchParts.length > 0 ?
`?${searchParts.join('?')}` :
'';
url = normalizeUrlObject({ ...opts, pathname, search });
}
opts = {
headers: {},
method: 'GET',
cache: true,
strictTtl: false,
automaticFailover: false,
...opts,
...urlObjectToRequestOptions(url)
};
opts.headers = lowercaseKeys(opts.headers);
const ee = new EventEmitter();
const normalizedUrlString = normalizeUrl(
urlLib.format(url),
{
stripWWW: false,
removeTrailingSlash: false,
stripAuthentication: false
}
);
const key = `${opts.method}:${normalizedUrlString}`;
let revalidate = false;
let madeRequest = false;
const makeRequest = opts => {
madeRequest = true;
let requestErrored = false;
let requestErrorCallback;
const requestErrorPromise = new Promise(resolve => {
requestErrorCallback = () => {
if (!requestErrored) {
requestErrored = true;
resolve();
}
};
});
const handler = response => {
if (revalidate && !opts.forceRefresh) {
response.status = response.statusCode;
const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response);
if (!revalidatedPolicy.modified) {
const headers = revalidatedPolicy.policy.responseHeaders();
response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url);
response.cachePolicy = revalidatedPolicy.policy;
response.fromCache = true;
}
}
if (!response.fromCache) {
response.cachePolicy = new CachePolicy(opts, response, opts);
response.fromCache = false;
}
let clonedResponse;
if (opts.cache && response.cachePolicy.storable()) {
clonedResponse = cloneResponse(response);
(async () => {
try {
const bodyPromise = getStream.buffer(response);
await Promise.race([
requestErrorPromise,
new Promise(resolve => response.once('end', resolve))
]);
if (requestErrored) {
return;
}
const body = await bodyPromise;
const value = {
cachePolicy: response.cachePolicy.toObject(),
url: response.url,
statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
body
};
let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined;
if (opts.maxTtl) {
ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl;
}
await this.cache.set(key, value, ttl);
} catch (error) {
ee.emit('error', new CacheableRequest.CacheError(error));
}
})();
} else if (opts.cache && revalidate) {
(async () => {
try {
await this.cache.delete(key);
} catch (error) {
ee.emit('error', new CacheableRequest.CacheError(error));
}
})();
}
ee.emit('response', clonedResponse || response);
if (typeof cb === 'function') {
cb(clonedResponse || response);
}
};
try {
const req = request(opts, handler);
req.once('error', requestErrorCallback);
req.once('abort', requestErrorCallback);
ee.emit('request', req);
} catch (error) {
ee.emit('error', new CacheableRequest.RequestError(error));
}
};
(async () => {
const get = async opts => {
await Promise.resolve();
const cacheEntry = opts.cache ? await this.cache.get(key) : undefined;
if (typeof cacheEntry === 'undefined') {
return makeRequest(opts);
}
const policy = CachePolicy.fromObject(cacheEntry.cachePolicy);
if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) {
const headers = policy.responseHeaders();
const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url);
response.cachePolicy = policy;
response.fromCache = true;
ee.emit('response', response);
if (typeof cb === 'function') {
cb(response);
}
} else {
revalidate = cacheEntry;
opts.headers = policy.revalidationHeaders(opts);
makeRequest(opts);
}
};
const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error));
this.cache.once('error', errorHandler);
ee.on('response', () => this.cache.removeListener('error', errorHandler));
try {
await get(opts);
} catch (error) {
if (opts.automaticFailover && !madeRequest) {
makeRequest(opts);
}
ee.emit('error', new CacheableRequest.CacheError(error));
}
})();
return ee;
};
}
}
function urlObjectToRequestOptions(url) {
const options = { ...url };
options.path = `${url.pathname || '/'}${url.search || ''}`;
delete options.pathname;
delete options.search;
return options;
}
function normalizeUrlObject(url) {
// If url was parsed by url.parse or new URL:
// - hostname will be set
// - host will be hostname[:port]
// - port will be set if it was explicit in the parsed string
// Otherwise, url was from request options:
// - hostname or host may be set
// - host shall not have port encoded
return {
protocol: url.protocol,
auth: url.auth,
hostname: url.hostname || url.host || 'localhost',
port: url.port,
pathname: url.pathname,
search: url.search
};
}
CacheableRequest.RequestError = class extends Error {
constructor(error) {
super(error.message);
this.name = 'RequestError';
Object.assign(this, error);
}
};
CacheableRequest.CacheError = class extends Error {
constructor(error) {
super(error.message);
this.name = 'CacheError';
Object.assign(this, error);
}
};
module.exports = CacheableRequest;
/***/ }),
/***/ 402:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = Octokit;
const { request } = __webpack_require__(753);
const Hook = __webpack_require__(523);
const parseClientOptions = __webpack_require__(294);
function Octokit(plugins, options) {
options = options || {};
const hook = new Hook.Collection();
const log = Object.assign(
{
debug: () => {},
info: () => {},
warn: console.warn,
error: console.error
},
options && options.log
);
const api = {
hook,
log,
request: request.defaults(parseClientOptions(options, log, hook))
};
plugins.forEach(pluginFunction => pluginFunction(api, options));
return api;
}
/***/ }),
/***/ 413:
/***/ (function(module) {
module.exports = require("stream");
/***/ }),
/***/ 427:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
// Older verions of Node.js might not have `util.getSystemErrorName()`.
// In that case, fall back to a deprecated internal.
const util = __webpack_require__(669);
let uv;
if (typeof util.getSystemErrorName === 'function') {
module.exports = util.getSystemErrorName;
} else {
try {
uv = process.binding('uv');
if (typeof uv.errname !== 'function') {
throw new TypeError('uv.errname is not a function');
}
} catch (err) {
console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
uv = null;
}
module.exports = code => errname(uv, code);
}
// Used for testing the fallback behavior
module.exports.__test__ = errname;
function errname(uv, code) {
if (uv) {
return uv.errname(code);
}
if (!(code < 0)) {
throw new Error('err >= 0');
}
return `Unknown system error ${code}`;
}
/***/ }),
/***/ 430:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = octokitValidate;
const validate = __webpack_require__(348);
function octokitValidate(octokit) {
octokit.hook.before("request", validate.bind(null, octokit));
}
/***/ }),
/***/ 431:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const os = __importStar(__webpack_require__(87));
/**
2020-06-11 09:37:37 +02:00
* Commands
*
* Command Format:
* ::name key=value,key=value::message
*
* Examples:
* ::warning::This is the message
* ::set-env name=MY_VAR::some value
*/
2020-06-11 09:37:37 +02:00
function issueCommand(command, properties, message) {
const cmd = new Command(command, properties, message);
process.stdout.write(cmd.toString() + os.EOL);
}
2020-06-11 09:37:37 +02:00
exports.issueCommand = issueCommand;
function issue(name, message = '') {
issueCommand(name, {}, message);
}
2020-06-11 09:37:37 +02:00
exports.issue = issue;
const CMD_STRING = '::';
class Command {
constructor(command, properties, message) {
if (!command) {
command = 'missing.command';
}
2020-06-11 09:37:37 +02:00
this.command = command;
this.properties = properties;
this.message = message;
}
toString() {
let cmdStr = CMD_STRING + this.command;
if (this.properties && Object.keys(this.properties).length > 0) {
cmdStr += ' ';
let first = true;
for (const key in this.properties) {
if (this.properties.hasOwnProperty(key)) {
const val = this.properties[key];
if (val) {
if (first) {
first = false;
}
else {
cmdStr += ',';
}
cmdStr += `${key}=${escapeProperty(val)}`;
}
}
}
}
2020-06-11 09:37:37 +02:00
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
return cmdStr;
}
}
/**
2020-06-11 09:37:37 +02:00
* Sanitizes an input into a string so it can be passed into issueCommand safely
* @param input input to sanitize into a string
*/
2020-06-11 09:37:37 +02:00
function toCommandValue(input) {
if (input === null || input === undefined) {
return '';
}
else if (typeof input === 'string' || input instanceof String) {
return input;
}
return JSON.stringify(input);
}
2020-06-11 09:37:37 +02:00
exports.toCommandValue = toCommandValue;
function escapeData(s) {
return toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A');
}
2020-06-11 09:37:37 +02:00
function escapeProperty(s) {
return toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A')
.replace(/:/g, '%3A')
.replace(/,/g, '%2C');
}
//# sourceMappingURL=command.js.map
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 453:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
var once = __webpack_require__(969)
var eos = __webpack_require__(9)
var fs = __webpack_require__(747) // we only need fs to get the ReadStream and WriteStream prototypes
2020-06-11 09:37:37 +02:00
var noop = function () {}
var ancient = /^v?\.0/.test(process.version)
2020-06-11 09:37:37 +02:00
var isFn = function (fn) {
return typeof fn === 'function'
}
2020-06-11 09:37:37 +02:00
var isFS = function (stream) {
if (!ancient) return false // newer node version do not need to care about fs is a special way
if (!fs) return false // browser
return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
}
2020-06-11 09:37:37 +02:00
var isRequest = function (stream) {
return stream.setHeader && isFn(stream.abort)
}
2020-06-11 09:37:37 +02:00
var destroyer = function (stream, reading, writing, callback) {
callback = once(callback)
2020-06-11 09:37:37 +02:00
var closed = false
stream.on('close', function () {
closed = true
})
2020-06-11 09:37:37 +02:00
eos(stream, {readable: reading, writable: writing}, function (err) {
if (err) return callback(err)
closed = true
callback()
})
2020-06-11 09:37:37 +02:00
var destroyed = false
return function (err) {
if (closed) return
if (destroyed) return
destroyed = true
2020-06-11 09:37:37 +02:00
if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
2020-06-11 09:37:37 +02:00
if (isFn(stream.destroy)) return stream.destroy()
2020-06-11 09:37:37 +02:00
callback(err || new Error('stream was destroyed'))
}
}
2020-06-11 09:37:37 +02:00
var call = function (fn) {
fn()
}
2020-06-11 09:37:37 +02:00
var pipe = function (from, to) {
return from.pipe(to)
}
2020-06-11 09:37:37 +02:00
var pump = function () {
var streams = Array.prototype.slice.call(arguments)
var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
2020-06-11 09:37:37 +02:00
if (Array.isArray(streams[0])) streams = streams[0]
if (streams.length < 2) throw new Error('pump requires two streams per minimum')
2020-06-11 09:37:37 +02:00
var error
var destroys = streams.map(function (stream, i) {
var reading = i < streams.length - 1
var writing = i > 0
return destroyer(stream, reading, writing, function (err) {
if (!error) error = err
if (err) destroys.forEach(call)
if (reading) return
destroys.forEach(call)
callback(error)
})
})
2020-06-11 09:37:37 +02:00
return streams.reduce(pipe)
}
2020-06-11 09:37:37 +02:00
module.exports = pump
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 454:
/***/ (function(module, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, '__esModule', { value: true });
2020-06-11 09:37:37 +02:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2020-06-11 09:37:37 +02:00
var Stream = _interopDefault(__webpack_require__(413));
var http = _interopDefault(__webpack_require__(605));
var Url = _interopDefault(__webpack_require__(835));
var https = _interopDefault(__webpack_require__(211));
var zlib = _interopDefault(__webpack_require__(761));
2020-06-11 09:37:37 +02:00
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
2020-06-11 09:37:37 +02:00
// fix for "Readable" isn't a named export issue
const Readable = Stream.Readable;
2020-06-11 09:37:37 +02:00
const BUFFER = Symbol('buffer');
const TYPE = Symbol('type');
2020-06-11 09:37:37 +02:00
class Blob {
constructor() {
this[TYPE] = '';
2020-06-11 09:37:37 +02:00
const blobParts = arguments[0];
const options = arguments[1];
2020-06-11 09:37:37 +02:00
const buffers = [];
let size = 0;
2020-06-11 09:37:37 +02:00
if (blobParts) {
const a = blobParts;
const length = Number(a.length);
for (let i = 0; i < length; i++) {
const element = a[i];
let buffer;
if (element instanceof Buffer) {
buffer = element;
} else if (ArrayBuffer.isView(element)) {
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
} else if (element instanceof ArrayBuffer) {
buffer = Buffer.from(element);
} else if (element instanceof Blob) {
buffer = element[BUFFER];
} else {
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
}
size += buffer.length;
buffers.push(buffer);
}
}
2020-06-11 09:37:37 +02:00
this[BUFFER] = Buffer.concat(buffers);
2020-06-11 09:37:37 +02:00
let type = options && options.type !== undefined && String(options.type).toLowerCase();
if (type && !/[^\u0020-\u007E]/.test(type)) {
this[TYPE] = type;
}
}
get size() {
return this[BUFFER].length;
}
get type() {
return this[TYPE];
}
text() {
return Promise.resolve(this[BUFFER].toString());
}
arrayBuffer() {
const buf = this[BUFFER];
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
return Promise.resolve(ab);
}
stream() {
const readable = new Readable();
readable._read = function () {};
readable.push(this[BUFFER]);
readable.push(null);
return readable;
}
toString() {
return '[object Blob]';
}
slice() {
const size = this.size;
2020-06-11 09:37:37 +02:00
const start = arguments[0];
const end = arguments[1];
let relativeStart, relativeEnd;
if (start === undefined) {
relativeStart = 0;
} else if (start < 0) {
relativeStart = Math.max(size + start, 0);
} else {
relativeStart = Math.min(start, size);
}
if (end === undefined) {
relativeEnd = size;
} else if (end < 0) {
relativeEnd = Math.max(size + end, 0);
} else {
relativeEnd = Math.min(end, size);
}
const span = Math.max(relativeEnd - relativeStart, 0);
const buffer = this[BUFFER];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob([], { type: arguments[2] });
blob[BUFFER] = slicedBuffer;
return blob;
}
}
Object.defineProperties(Blob.prototype, {
size: { enumerable: true },
type: { enumerable: true },
slice: { enumerable: true }
});
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
/**
2020-06-11 09:37:37 +02:00
* fetch-error.js
*
* FetchError interface for operational errors
*/
2020-06-11 09:37:37 +02:00
/**
* Create FetchError instance
*
* @param String message Error message for human
* @param String type Error type for machine
* @param String systemError For Node.js system error
* @return FetchError
*/
function FetchError(message, type, systemError) {
Error.call(this, message);
this.message = message;
this.type = type;
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
2020-06-11 09:37:37 +02:00
FetchError.prototype = Object.create(Error.prototype);
FetchError.prototype.constructor = FetchError;
FetchError.prototype.name = 'FetchError';
let convert;
try {
convert = __webpack_require__(18).convert;
} catch (e) {}
const INTERNALS = Symbol('Body internals');
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream.PassThrough;
/**
* Body mixin
*
* Ref: https://fetch.spec.whatwg.org/#body
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
function Body(body) {
var _this = this;
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
if (body == null) {
// body is undefined or null
body = null;
} else if (isURLSearchParams(body)) {
// body is a URLSearchParams
body = Buffer.from(body.toString());
} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
body = Buffer.from(body);
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
} else if (body instanceof Stream) ; else {
// none of the above
// coerce to string then buffer
body = Buffer.from(String(body));
}
this[INTERNALS] = {
body,
disturbed: false,
error: null
};
this.size = size;
this.timeout = timeout;
if (body instanceof Stream) {
body.on('error', function (err) {
const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
_this[INTERNALS].error = error;
});
}
}
2020-06-11 09:37:37 +02:00
Body.prototype = {
get body() {
return this[INTERNALS].body;
},
get bodyUsed() {
return this[INTERNALS].disturbed;
},
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
/**
* Return raw response as Blob
*
* @return Promise
*/
blob() {
let ct = this.headers && this.headers.get('content-type') || '';
return consumeBody.call(this).then(function (buf) {
return Object.assign(
// Prevent copying
new Blob([], {
type: ct.toLowerCase()
}), {
[BUFFER]: buf
});
});
},
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
return consumeBody.call(this).then(function (buffer) {
try {
return JSON.parse(buffer.toString());
} catch (err) {
return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
}
});
},
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody.call(this).then(function (buffer) {
return buffer.toString();
});
},
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody.call(this);
},
/**
* Decode response as text, while automatically detecting the encoding and
* trying to decode to UTF-8 (non-spec api)
*
* @return Promise
*/
textConverted() {
var _this3 = this;
return consumeBody.call(this).then(function (buffer) {
return convertBody(buffer, _this3.headers);
});
}
};
// In browsers, all properties are enumerable.
Object.defineProperties(Body.prototype, {
body: { enumerable: true },
bodyUsed: { enumerable: true },
arrayBuffer: { enumerable: true },
blob: { enumerable: true },
json: { enumerable: true },
text: { enumerable: true }
});
Body.mixIn = function (proto) {
for (const name of Object.getOwnPropertyNames(Body.prototype)) {
// istanbul ignore else: future proof
if (!(name in proto)) {
const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
Object.defineProperty(proto, name, desc);
}
}
};
/**
* Consume and convert an entire Body to a Buffer.
*
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
*
* @return Promise
*/
function consumeBody() {
var _this4 = this;
if (this[INTERNALS].disturbed) {
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
this[INTERNALS].disturbed = true;
if (this[INTERNALS].error) {
return Body.Promise.reject(this[INTERNALS].error);
}
let body = this.body;
// body is null
if (body === null) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is blob
if (isBlob(body)) {
body = body.stream();
}
// body is buffer
if (Buffer.isBuffer(body)) {
return Body.Promise.resolve(body);
}
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body.Promise.resolve(Buffer.alloc(0));
}
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
return new Body.Promise(function (resolve, reject) {
let resTimeout;
// allow timeout on slow response body
if (_this4.timeout) {
resTimeout = setTimeout(function () {
abort = true;
reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
}, _this4.timeout);
}
// handle stream errors
body.on('error', function (err) {
if (err.name === 'AbortError') {
// if the request was aborted, reject with this Error
abort = true;
reject(err);
} else {
// other errors, such as incorrect content-encoding
reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
}
});
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
if (_this4.size && accumBytes + chunk.length > _this4.size) {
abort = true;
reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
return;
}
accumBytes += chunk.length;
accum.push(chunk);
});
body.on('end', function () {
if (abort) {
return;
}
clearTimeout(resTimeout);
try {
resolve(Buffer.concat(accum, accumBytes));
} catch (err) {
// handle streams that have accumulated too much data (issue #414)
reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
}
});
});
}
/**
* Detect buffer encoding and convert to target encoding
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
*
* @param Buffer buffer Incoming buffer
* @param String encoding Target encoding
* @return String
*/
function convertBody(buffer, headers) {
if (typeof convert !== 'function') {
throw new Error('The package `encoding` must be installed to use the textConverted() function');
}
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
// html5
if (!res && str) {
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
}
// html4
if (!res && str) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
if (res) {
res = /charset=(.*)/i.exec(res.pop());
}
}
// xml
if (!res && str) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
}
// found charset
if (res) {
charset = res.pop();
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if (charset === 'gb2312' || charset === 'gbk') {
charset = 'gb18030';
}
}
// turn raw buffers into a single utf-8 buffer
return convert(buffer, 'UTF-8', charset).toString();
}
/**
* Detect a URLSearchParams object
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
*
* @param Object obj Object to detect by type or brand
* @return String
*/
function isURLSearchParams(obj) {
// Duck-typing as a necessary condition.
if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
return false;
}
// Brand-checking and more duck-typing as optional condition.
return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
}
/**
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
* @param {*} obj
* @return {boolean}
*/
function isBlob(obj) {
return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
}
/**
* Clone body given Res/Req instance
*
* @param Mixed instance Response or Request instance
* @return Mixed
*/
function clone(instance) {
let p1, p2;
let body = instance.body;
// don't allow cloning a used body
if (instance.bodyUsed) {
throw new Error('cannot clone body after it is used');
}
// check that body is a stream and not form-data object
// note: we can't clone the form-data object without having it as a dependency
if (body instanceof Stream && typeof body.getBoundary !== 'function') {
// tee instance body
p1 = new PassThrough();
p2 = new PassThrough();
body.pipe(p1);
body.pipe(p2);
// set instance body to teed body and return the other teed body
instance[INTERNALS].body = p1;
body = p2;
}
return body;
}
/**
* Performs the operation "extract a `Content-Type` value from |object|" as
* specified in the specification:
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
*
* This function assumes that instance.body is present.
*
* @param Mixed instance Any options.body input
*/
function extractContentType(body) {
if (body === null) {
// body is null
return null;
} else if (typeof body === 'string') {
// body is string
return 'text/plain;charset=UTF-8';
} else if (isURLSearchParams(body)) {
// body is a URLSearchParams
return 'application/x-www-form-urlencoded;charset=UTF-8';
} else if (isBlob(body)) {
// body is blob
return body.type || null;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return null;
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
// body is ArrayBuffer
return null;
} else if (ArrayBuffer.isView(body)) {
// body is ArrayBufferView
return null;
} else if (typeof body.getBoundary === 'function') {
// detect form data input from form-data module
return `multipart/form-data;boundary=${body.getBoundary()}`;
} else if (body instanceof Stream) {
// body is stream
// can't really do much about this
return null;
} else {
// Body constructor defaults other things to string
return 'text/plain;charset=UTF-8';
}
}
/**
* The Fetch Standard treats this as if "total bytes" is a property on the body.
* For us, we have to explicitly get it with a function.
*
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
*
* @param Body instance Instance of Body
* @return Number? Number of bytes, or null if not possible
*/
function getTotalBytes(instance) {
const body = instance.body;
if (body === null) {
// body is null
return 0;
} else if (isBlob(body)) {
return body.size;
} else if (Buffer.isBuffer(body)) {
// body is buffer
return body.length;
} else if (body && typeof body.getLengthSync === 'function') {
// detect form data input from form-data module
if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
body.hasKnownLength && body.hasKnownLength()) {
// 2.x
return body.getLengthSync();
}
return null;
} else {
// body is stream
return null;
}
}
/**
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
*
* @param Body instance Instance of Body
* @return Void
*/
function writeToStream(dest, instance) {
const body = instance.body;
if (body === null) {
// body is null
dest.end();
} else if (isBlob(body)) {
body.stream().pipe(dest);
} else if (Buffer.isBuffer(body)) {
// body is buffer
dest.write(body);
dest.end();
} else {
// body is stream
body.pipe(dest);
}
}
// expose Promise
Body.Promise = global.Promise;
/**
* headers.js
*
* Headers class offers convenient helpers
*/
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
function validateName(name) {
name = `${name}`;
if (invalidTokenRegex.test(name) || name === '') {
throw new TypeError(`${name} is not a legal HTTP header name`);
}
}
function validateValue(value) {
value = `${value}`;
if (invalidHeaderCharRegex.test(value)) {
throw new TypeError(`${value} is not a legal HTTP header value`);
}
}
/**
* Find the key in the map object given a header name.
*
* Returns undefined if not found.
*
* @param String name Header name
* @return String|Undefined
*/
function find(map, name) {
name = name.toLowerCase();
for (const key in map) {
if (key.toLowerCase() === name) {
return key;
}
}
return undefined;
}
const MAP = Symbol('map');
class Headers {
/**
* Headers class
*
* @param Object headers Response headers
* @return Void
*/
constructor() {
let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
this[MAP] = Object.create(null);
if (init instanceof Headers) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
return;
}
// We don't worry about converting prop to ByteString here as append()
// will handle it.
if (init == null) ; else if (typeof init === 'object') {
const method = init[Symbol.iterator];
if (method != null) {
if (typeof method !== 'function') {
throw new TypeError('Header pairs must be iterable');
}
// sequence<sequence<ByteString>>
// Note: per spec we have to first exhaust the lists then process them
const pairs = [];
for (const pair of init) {
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
throw new TypeError('Each header pair must be iterable');
}
pairs.push(Array.from(pair));
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError('Each header pair must be a name/value tuple');
}
this.append(pair[0], pair[1]);
}
} else {
// record<ByteString, ByteString>
for (const key of Object.keys(init)) {
const value = init[key];
this.append(key, value);
}
}
} else {
throw new TypeError('Provided initializer must be an object');
}
}
/**
* Return combined header value given name
*
* @param String name Header name
* @return Mixed
*/
get(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key === undefined) {
return null;
}
return this[MAP][key].join(', ');
}
/**
* Iterate over all headers
*
* @param Function callback Executed for each item with parameters (value, name, thisArg)
* @param Boolean thisArg `this` context for callback function
* @return Void
*/
forEach(callback) {
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
let pairs = getHeaders(this);
let i = 0;
while (i < pairs.length) {
var _pairs$i = pairs[i];
const name = _pairs$i[0],
value = _pairs$i[1];
callback.call(thisArg, value, name, this);
pairs = getHeaders(this);
i++;
}
}
/**
* Overwrite header values given name
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
set(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
this[MAP][key !== undefined ? key : name] = [value];
}
/**
* Append a value onto existing header
*
* @param String name Header name
* @param String value Header value
* @return Void
*/
append(name, value) {
name = `${name}`;
value = `${value}`;
validateName(name);
validateValue(value);
const key = find(this[MAP], name);
if (key !== undefined) {
this[MAP][key].push(value);
} else {
this[MAP][name] = [value];
}
}
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName(name);
return find(this[MAP], name) !== undefined;
}
/**
* Delete all header values given name
*
* @param String name Header name
* @return Void
*/
delete(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key !== undefined) {
delete this[MAP][key];
}
}
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP];
}
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator(this, 'key');
}
/**
* Get an iterator on values.
*
* @return Iterator
*/
values() {
return createHeadersIterator(this, 'value');
}
/**
* Get an iterator on entries.
*
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
[Symbol.iterator]() {
return createHeadersIterator(this, 'key+value');
}
}
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Headers.prototype, {
get: { enumerable: true },
forEach: { enumerable: true },
set: { enumerable: true },
append: { enumerable: true },
has: { enumerable: true },
delete: { enumerable: true },
keys: { enumerable: true },
values: { enumerable: true },
entries: { enumerable: true }
});
function getHeaders(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
const keys = Object.keys(headers[MAP]).sort();
return keys.map(kind === 'key' ? function (k) {
return k.toLowerCase();
} : kind === 'value' ? function (k) {
return headers[MAP][k].join(', ');
} : function (k) {
return [k.toLowerCase(), headers[MAP][k].join(', ')];
});
}
const INTERNAL = Symbol('internal');
function createHeadersIterator(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype);
iterator[INTERNAL] = {
target,
kind,
index: 0
};
return iterator;
}
const HeadersIteratorPrototype = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
var _INTERNAL = this[INTERNAL];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
const values = getHeaders(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
this[INTERNAL].index = index + 1;
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
/**
* Export the Headers object in a form that Node.js can consume.
*
* @param Headers headers
* @return Object
*/
function exportNodeCompatibleHeaders(headers) {
const obj = Object.assign({ __proto__: null }, headers[MAP]);
// http.request() only supports string as Host header. This hack makes
// specifying custom Host header possible.
const hostHeaderKey = find(headers[MAP], 'Host');
if (hostHeaderKey !== undefined) {
obj[hostHeaderKey] = obj[hostHeaderKey][0];
}
return obj;
}
/**
* Create a Headers object from an object of headers, ignoring those that do
* not conform to HTTP grammar productions.
*
* @param Object obj Object of headers
* @return Headers
*/
function createHeadersLenient(obj) {
const headers = new Headers();
for (const name of Object.keys(obj)) {
if (invalidTokenRegex.test(name)) {
continue;
}
if (Array.isArray(obj[name])) {
for (const val of obj[name]) {
if (invalidHeaderCharRegex.test(val)) {
continue;
}
if (headers[MAP][name] === undefined) {
headers[MAP][name] = [val];
} else {
headers[MAP][name].push(val);
}
}
} else if (!invalidHeaderCharRegex.test(obj[name])) {
headers[MAP][name] = [obj[name]];
}
}
return headers;
}
const INTERNALS$1 = Symbol('Response internals');
// fix an issue where "STATUS_CODES" aren't a named export for node <10
const STATUS_CODES = http.STATUS_CODES;
/**
* Response class
*
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
class Response {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
Body.call(this, body, opts);
const status = opts.status || 200;
const headers = new Headers(opts.headers);
if (body != null && !headers.has('Content-Type')) {
const contentType = extractContentType(body);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
this[INTERNALS$1] = {
url: opts.url,
status,
statusText: opts.statusText || STATUS_CODES[status],
headers,
counter: opts.counter
};
}
get url() {
return this[INTERNALS$1].url || '';
}
get status() {
return this[INTERNALS$1].status;
}
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
}
get redirected() {
return this[INTERNALS$1].counter > 0;
}
get statusText() {
return this[INTERNALS$1].statusText;
}
get headers() {
return this[INTERNALS$1].headers;
}
/**
* Clone this response
*
* @return Response
*/
clone() {
return new Response(clone(this), {
url: this.url,
status: this.status,
statusText: this.statusText,
headers: this.headers,
ok: this.ok,
redirected: this.redirected
});
}
}
Body.mixIn(Response.prototype);
Object.defineProperties(Response.prototype, {
url: { enumerable: true },
status: { enumerable: true },
ok: { enumerable: true },
redirected: { enumerable: true },
statusText: { enumerable: true },
headers: { enumerable: true },
clone: { enumerable: true }
});
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
const INTERNALS$2 = Symbol('Request internals');
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url = Url.parse;
const format_url = Url.format;
const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
/**
* Check if a value is an instance of Request.
*
* @param Mixed input
* @return Boolean
*/
function isRequest(input) {
return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
}
function isAbortSignal(signal) {
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
return !!(proto && proto.constructor.name === 'AbortSignal');
}
/**
* Request class
*
* @param Mixed input Url or Request instance
* @param Object init Custom options
* @return Void
*/
class Request {
constructor(input) {
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let parsedURL;
// normalize input
if (!isRequest(input)) {
if (input && input.href) {
// in order to support Node.js' Url objects; though WHATWG's URL objects
// will fall into this branch also (since their `toString()` will return
// `href` property anyway)
parsedURL = parse_url(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parse_url(`${input}`);
}
input = {};
} else {
parsedURL = parse_url(input.url);
}
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
Body.call(this, inputBody, {
timeout: init.timeout || input.timeout || 0,
size: init.size || input.size || 0
});
const headers = new Headers(init.headers || input.headers || {});
if (inputBody != null && !headers.has('Content-Type')) {
const contentType = extractContentType(inputBody);
if (contentType) {
headers.append('Content-Type', contentType);
}
}
let signal = isRequest(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
if (signal != null && !isAbortSignal(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
this[INTERNALS$2] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
// node-fetch-only options
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
this.counter = init.counter || input.counter || 0;
this.agent = init.agent || input.agent;
}
get method() {
return this[INTERNALS$2].method;
}
get url() {
return format_url(this[INTERNALS$2].parsedURL);
}
get headers() {
return this[INTERNALS$2].headers;
}
get redirect() {
return this[INTERNALS$2].redirect;
}
get signal() {
return this[INTERNALS$2].signal;
}
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request(this);
}
}
Body.mixIn(Request.prototype);
Object.defineProperty(Request.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
Object.defineProperties(Request.prototype, {
method: { enumerable: true },
url: { enumerable: true },
headers: { enumerable: true },
redirect: { enumerable: true },
clone: { enumerable: true },
signal: { enumerable: true }
});
/**
* Convert a Request to Node.js http request options.
*
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
function getNodeRequestOptions(request) {
const parsedURL = request[INTERNALS$2].parsedURL;
const headers = new Headers(request[INTERNALS$2].headers);
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
}
// HTTP-network-or-cache fetch steps 2.4-2.7
let contentLengthValue = null;
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
contentLengthValue = '0';
}
if (request.body != null) {
const totalBytes = getTotalBytes(request);
if (typeof totalBytes === 'number') {
contentLengthValue = String(totalBytes);
}
}
if (contentLengthValue) {
headers.set('Content-Length', contentLengthValue);
}
// HTTP-network-or-cache fetch step 2.11
if (!headers.has('User-Agent')) {
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
}
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
}
let agent = request.agent;
if (typeof agent === 'function') {
agent = agent(parsedURL);
}
if (!headers.has('Connection') && !agent) {
headers.set('Connection', 'close');
}
// HTTP-network fetch step 4.2
// chunked encoding is handled by Node.js
return Object.assign({}, parsedURL, {
method: request.method,
headers: exportNodeCompatibleHeaders(headers),
agent
});
}
/**
* abort-error.js
*
* AbortError interface for cancelled requests
*/
/**
* Create AbortError instance
*
* @param String message Error message for human
* @return AbortError
*/
function AbortError(message) {
Error.call(this, message);
this.type = 'aborted';
this.message = message;
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
AbortError.prototype = Object.create(Error.prototype);
AbortError.prototype.constructor = AbortError;
AbortError.prototype.name = 'AbortError';
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const resolve_url = Url.resolve;
/**
* Fetch function
*
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
function fetch(url, opts) {
// allow custom promise
if (!fetch.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
}
Body.Promise = fetch.Promise;
// wrap http.request into fetch
return new fetch.Promise(function (resolve, reject) {
// build request object
const request = new Request(url, opts);
const options = getNodeRequestOptions(request);
const send = (options.protocol === 'https:' ? https : http).request;
const signal = request.signal;
let response = null;
const abort = function abort() {
let error = new AbortError('The user aborted a request.');
reject(error);
if (request.body && request.body instanceof Stream.Readable) {
request.body.destroy(error);
}
if (!response || !response.body) return;
response.body.emit('error', error);
};
if (signal && signal.aborted) {
abort();
return;
}
const abortAndFinalize = function abortAndFinalize() {
abort();
finalize();
};
// send request
const req = send(options);
let reqTimeout;
if (signal) {
signal.addEventListener('abort', abortAndFinalize);
}
function finalize() {
req.abort();
if (signal) signal.removeEventListener('abort', abortAndFinalize);
clearTimeout(reqTimeout);
}
if (request.timeout) {
req.once('socket', function (socket) {
reqTimeout = setTimeout(function () {
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
finalize();
}, request.timeout);
});
}
req.on('error', function (err) {
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
finalize();
});
req.on('response', function (res) {
clearTimeout(reqTimeout);
const headers = createHeadersLenient(res.headers);
// HTTP fetch step 5
if (fetch.isRedirect(res.statusCode)) {
// HTTP fetch step 5.2
const location = headers.get('Location');
// HTTP fetch step 5.3
const locationURL = location === null ? null : resolve_url(request.url, location);
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
finalize();
return;
case 'manual':
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
if (locationURL !== null) {
// handle corrupted header
try {
headers.set('Location', locationURL);
} catch (err) {
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
reject(err);
}
}
break;
case 'follow':
// HTTP-redirect fetch step 2
if (locationURL === null) {
break;
}
// HTTP-redirect fetch step 5
if (request.counter >= request.follow) {
reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 6 (counter increment)
// Create a new Request object.
const requestOpts = {
headers: new Headers(request.headers),
follow: request.follow,
counter: request.counter + 1,
agent: request.agent,
compress: request.compress,
method: request.method,
body: request.body,
signal: request.signal,
timeout: request.timeout
};
// HTTP-redirect fetch step 9
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
finalize();
return;
}
// HTTP-redirect fetch step 11
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
requestOpts.method = 'GET';
requestOpts.body = undefined;
requestOpts.headers.delete('content-length');
}
// HTTP-redirect fetch step 15
resolve(fetch(new Request(locationURL, requestOpts)));
finalize();
return;
}
}
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1());
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
// HTTP-network fetch step 12.1.1.3
const codings = headers.get('Content-Encoding');
// HTTP-network fetch step 12.1.1.4: handle content codings
// in following scenarios we ignore compression support
// 1. compression support is disabled
// 2. HEAD request
// 3. no Content-Encoding header
// 4. no content response (204)
// 5. content not modified response (304)
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
response = new Response(body, response_options);
resolve(response);
return;
}
// For Node v6+
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
const zlibOptions = {
flush: zlib.Z_SYNC_FLUSH,
finishFlush: zlib.Z_SYNC_FLUSH
};
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response(body, response_options);
resolve(response);
return;
}
// for deflate
if (codings == 'deflate' || codings == 'x-deflate') {
// handle the infamous raw deflate response from old servers
// a hack for old IIS and Apache servers
const raw = res.pipe(new PassThrough$1());
raw.once('data', function (chunk) {
// see http://stackoverflow.com/questions/37519828
if ((chunk[0] & 0x0F) === 0x08) {
body = body.pipe(zlib.createInflate());
} else {
body = body.pipe(zlib.createInflateRaw());
}
response = new Response(body, response_options);
resolve(response);
});
return;
}
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response(body, response_options);
resolve(response);
return;
}
// otherwise, use response as-is
response = new Response(body, response_options);
resolve(response);
});
writeToStream(req, request);
});
}
/**
* Redirect code matching
*
* @param Number code Status code
* @return Boolean
*/
fetch.isRedirect = function (code) {
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
};
// expose Promise
fetch.Promise = global.Promise;
module.exports = exports = fetch;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = exports;
exports.Headers = Headers;
exports.Request = Request;
exports.Response = Response;
exports.FetchError = FetchError;
/***/ }),
/***/ 460:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __webpack_require__(534);
exports.default = (body) => is_1.default.nodeStream(body) && is_1.default.function_(body.getBoundary);
/***/ }),
/***/ 462:
/***/ (function(module) {
"use strict";
// See http://www.robvanderwoude.com/escapechars.php
const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
function escapeCommand(arg) {
// Escape meta chars
arg = arg.replace(metaCharsRegExp, '^$1');
return arg;
}
function escapeArgument(arg, doubleEscapeMetaChars) {
// Convert to string
arg = `${arg}`;
// Algorithm below is based on https://qntm.org/cmd
// Sequence of backslashes followed by a double quote:
// double up all the backslashes and escape the double quote
arg = arg.replace(/(\\*)"/g, '$1$1\\"');
// Sequence of backslashes followed by the end of the string
// (which will become a double quote later):
// double up all the backslashes
arg = arg.replace(/(\\*)$/, '$1$1');
// All other backslashes occur literally
// Quote the whole thing:
arg = `"${arg}"`;
// Escape meta chars
arg = arg.replace(metaCharsRegExp, '^$1');
// Double escape meta chars if necessary
if (doubleEscapeMetaChars) {
arg = arg.replace(metaCharsRegExp, '^$1');
}
return arg;
}
module.exports.command = escapeCommand;
module.exports.argument = escapeArgument;
/***/ }),
/***/ 463:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var deprecation = __webpack_require__(692);
var once = _interopDefault(__webpack_require__(969));
const logOnce = once(deprecation => console.warn(deprecation));
/**
* Error with extra properties to help with debugging
*/
class RequestError extends Error {
constructor(message, statusCode, options) {
super(message); // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
this.name = "HttpError";
this.status = statusCode;
Object.defineProperty(this, "code", {
get() {
logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
return statusCode;
}
});
this.headers = options.headers || {}; // redact request credentials without mutating original request options
const requestCopy = Object.assign({}, options.request);
if (options.request.headers.authorization) {
requestCopy.headers = Object.assign({}, options.request.headers, {
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
});
}
requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
// see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
// see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
.replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
this.request = requestCopy;
}
}
exports.RequestError = RequestError;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 468:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = __webpack_require__(534);
const types_1 = __webpack_require__(36);
const core_1 = __webpack_require__(946);
if (!core_1.knownHookEvents.includes('beforeRetry')) {
core_1.knownHookEvents.push('beforeRetry', 'afterResponse');
}
exports.knownBodyTypes = ['json', 'buffer', 'text'];
// @ts-ignore The error is: Not all code paths return a value.
exports.parseBody = (response, responseType, parseJson, encoding) => {
const { rawBody } = response;
try {
if (responseType === 'text') {
return rawBody.toString(encoding);
}
if (responseType === 'json') {
return rawBody.length === 0 ? '' : parseJson(rawBody.toString());
}
if (responseType === 'buffer') {
return Buffer.from(rawBody);
}
throw new types_1.ParseError({
message: `Unknown body type '${responseType}'`,
name: 'Error'
}, response);
}
catch (error) {
throw new types_1.ParseError(error, response);
}
};
class PromisableRequest extends core_1.default {
static normalizeArguments(url, nonNormalizedOptions, defaults) {
const options = super.normalizeArguments(url, nonNormalizedOptions, defaults);
if (is_1.default.null_(options.encoding)) {
throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
}
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.encoding);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.resolveBodyOnly);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.methodRewriting);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.isStream);
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.responseType);
// `options.responseType`
if (options.responseType === undefined) {
options.responseType = 'text';
}
// `options.retry`
const { retry } = options;
if (defaults) {
options.retry = { ...defaults.retry };
}
else {
options.retry = {
calculateDelay: retryObject => retryObject.computedValue,
limit: 0,
methods: [],
statusCodes: [],
errorCodes: [],
maxRetryAfter: undefined
};
}
if (is_1.default.object(retry)) {
options.retry = {
...options.retry,
...retry
};
options.retry.methods = [...new Set(options.retry.methods.map(method => method.toUpperCase()))];
options.retry.statusCodes = [...new Set(options.retry.statusCodes)];
options.retry.errorCodes = [...new Set(options.retry.errorCodes)];
}
else if (is_1.default.number(retry)) {
options.retry.limit = retry;
}
if (is_1.default.undefined(options.retry.maxRetryAfter)) {
options.retry.maxRetryAfter = Math.min(...[options.timeout.request, options.timeout.connect].filter(is_1.default.number));
}
// `options.pagination`
if (is_1.default.object(options.pagination)) {
if (defaults) {
options.pagination = {
...defaults.pagination,
...options.pagination
};
}
const { pagination } = options;
if (!is_1.default.function_(pagination.transform)) {
throw new Error('`options.pagination.transform` must be implemented');
}
if (!is_1.default.function_(pagination.shouldContinue)) {
throw new Error('`options.pagination.shouldContinue` must be implemented');
}
if (!is_1.default.function_(pagination.filter)) {
throw new TypeError('`options.pagination.filter` must be implemented');
}
if (!is_1.default.function_(pagination.paginate)) {
throw new Error('`options.pagination.paginate` must be implemented');
}
}
// JSON mode
if (options.responseType === 'json' && options.headers.accept === undefined) {
options.headers.accept = 'application/json';
}
return options;
}
static mergeOptions(...sources) {
let mergedOptions;
for (const source of sources) {
mergedOptions = PromisableRequest.normalizeArguments(undefined, source, mergedOptions);
}
return mergedOptions;
}
async _beforeError(error) {
if (!(error instanceof core_1.RequestError)) {
error = new core_1.RequestError(error.message, error, this);
}
// Let the promise decide whether to abort or not
// It is also responsible for the `beforeError` hook
this.emit('error', error);
}
}
exports.default = PromisableRequest;
/***/ }),
/***/ 469:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts
const graphql_1 = __webpack_require__(898);
const rest_1 = __webpack_require__(0);
const Context = __importStar(__webpack_require__(262));
const httpClient = __importStar(__webpack_require__(539));
// We need this in order to extend Octokit
rest_1.Octokit.prototype = new rest_1.Octokit();
exports.context = new Context.Context();
class GitHub extends rest_1.Octokit {
constructor(token, opts) {
super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts)));
this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts));
}
/**
* Disambiguates the constructor overload parameters
*/
static disambiguate(token, opts) {
return [
typeof token === 'string' ? token : '',
typeof token === 'object' ? token : opts || {}
];
}
static getOctokitOptions(args) {
const token = args[0];
const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller
// Base URL - GHES or Dotcom
options.baseUrl = options.baseUrl || this.getApiBaseUrl();
// Auth
const auth = GitHub.getAuthString(token, options);
if (auth) {
options.auth = auth;
}
// Proxy
const agent = GitHub.getProxyAgent(options.baseUrl, options);
if (agent) {
// Shallow clone - don't mutate the object provided by the caller
options.request = options.request ? Object.assign({}, options.request) : {};
// Set the agent
options.request.agent = agent;
}
return options;
}
static getGraphQL(args) {
const defaults = {};
defaults.baseUrl = this.getGraphQLBaseUrl();
const token = args[0];
const options = args[1];
// Authorization
const auth = this.getAuthString(token, options);
if (auth) {
defaults.headers = {
authorization: auth
};
}
// Proxy
const agent = GitHub.getProxyAgent(defaults.baseUrl, options);
if (agent) {
defaults.request = { agent };
}
return graphql_1.graphql.defaults(defaults);
}
static getAuthString(token, options) {
// Validate args
if (!token && !options.auth) {
throw new Error('Parameter token or opts.auth is required');
}
else if (token && options.auth) {
throw new Error('Parameters token and opts.auth may not both be specified');
}
return typeof options.auth === 'string' ? options.auth : `token ${token}`;
}
static getProxyAgent(destinationUrl, options) {
var _a;
if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) {
if (httpClient.getProxyUrl(destinationUrl)) {
const hc = new httpClient.HttpClient();
return hc.getAgent(destinationUrl);
}
}
return undefined;
}
static getApiBaseUrl() {
return process.env['GITHUB_API_URL'] || 'https://api.github.com';
}
static getGraphQLBaseUrl() {
let url = process.env['GITHUB_GRAPHQL_URL'] || 'https://api.github.com/graphql';
// Shouldn't be a trailing slash, but remove if so
if (url.endsWith('/')) {
url = url.substr(0, url.length - 1);
}
// Remove trailing "/graphql"
if (url.toUpperCase().endsWith('/GRAPHQL')) {
url = url.substr(0, url.length - '/graphql'.length);
}
return url;
}
}
exports.GitHub = GitHub;
//# sourceMappingURL=github.js.map
/***/ }),
/***/ 470:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const command_1 = __webpack_require__(431);
const os = __importStar(__webpack_require__(87));
const path = __importStar(__webpack_require__(622));
/**
* The code to exit an action
*/
var ExitCode;
(function (ExitCode) {
/**
* A code indicating that the action was successful
*/
ExitCode[ExitCode["Success"] = 0] = "Success";
/**
* A code indicating that the action was a failure
*/
ExitCode[ExitCode["Failure"] = 1] = "Failure";
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
//-----------------------------------------------------------------------
// Variables
//-----------------------------------------------------------------------
/**
* Sets env variable for this action and future actions in the job
* @param name the name of the variable to set
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function exportVariable(name, val) {
const convertedVal = command_1.toCommandValue(val);
process.env[name] = convertedVal;
command_1.issueCommand('set-env', { name }, convertedVal);
}
exports.exportVariable = exportVariable;
/**
* Registers a secret which will get masked from logs
* @param secret value of the secret
*/
function setSecret(secret) {
command_1.issueCommand('add-mask', {}, secret);
}
exports.setSecret = setSecret;
/**
* Prepends inputPath to the PATH (for this action and future actions)
* @param inputPath
*/
function addPath(inputPath) {
command_1.issueCommand('add-path', {}, inputPath);
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
}
exports.addPath = addPath;
/**
* Gets the value of an input. The value is also trimmed.
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns string
*/
function getInput(name, options) {
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
if (options && options.required && !val) {
throw new Error(`Input required and not supplied: ${name}`);
}
return val.trim();
}
exports.getInput = getInput;
/**
* Sets the value of an output.
*
* @param name name of the output to set
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function setOutput(name, value) {
command_1.issueCommand('set-output', { name }, value);
}
exports.setOutput = setOutput;
/**
* Enables or disables the echoing of commands into stdout for the rest of the step.
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
*
*/
function setCommandEcho(enabled) {
command_1.issue('echo', enabled ? 'on' : 'off');
}
exports.setCommandEcho = setCommandEcho;
//-----------------------------------------------------------------------
// Results
//-----------------------------------------------------------------------
/**
* Sets the action status to failed.
* When the action exits it will be with an exit code of 1
* @param message add error issue message
*/
function setFailed(message) {
process.exitCode = ExitCode.Failure;
error(message);
}
exports.setFailed = setFailed;
//-----------------------------------------------------------------------
// Logging Commands
//-----------------------------------------------------------------------
/**
* Gets whether Actions Step Debug is on or not
*/
function isDebug() {
return process.env['RUNNER_DEBUG'] === '1';
}
exports.isDebug = isDebug;
/**
* Writes debug message to user log
* @param message debug message
*/
function debug(message) {
command_1.issueCommand('debug', {}, message);
}
exports.debug = debug;
/**
* Adds an error issue
* @param message error issue message. Errors will be converted to string via toString()
*/
function error(message) {
command_1.issue('error', message instanceof Error ? message.toString() : message);
}
exports.error = error;
/**
* Adds an warning issue
* @param message warning issue message. Errors will be converted to string via toString()
*/
function warning(message) {
command_1.issue('warning', message instanceof Error ? message.toString() : message);
}
exports.warning = warning;
/**
* Writes info to log with console.log.
* @param message info message
*/
function info(message) {
process.stdout.write(message + os.EOL);
}
exports.info = info;
/**
* Begin an output group.
*
* Output until the next `groupEnd` will be foldable in this group
*
* @param name The name of the output group
*/
function startGroup(name) {
command_1.issue('group', name);
}
exports.startGroup = startGroup;
/**
* End an output group.
*/
function endGroup() {
command_1.issue('endgroup');
}
exports.endGroup = endGroup;
/**
* Wrap an asynchronous function call in a group.
*
* Returns the same type as the function itself.
*
* @param name The name of the group
* @param fn The function to wrap in the group
*/
function group(name, fn) {
return __awaiter(this, void 0, void 0, function* () {
startGroup(name);
let result;
try {
result = yield fn();
}
finally {
endGroup();
}
return result;
});
}
exports.group = group;
//-----------------------------------------------------------------------
// Wrapper action state
//-----------------------------------------------------------------------
/**
* Saves state for current action, the state can only be retrieved by this action's post job execution.
*
* @param name name of the state to store
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function saveState(name, value) {
command_1.issueCommand('save-state', { name }, value);
}
exports.saveState = saveState;
/**
* Gets the value of an state set by this action's main execution.
*
* @param name name of the state to get
* @returns string
*/
function getState(name) {
return process.env[`STATE_${name}`] || '';
}
exports.getState = getState;
//# sourceMappingURL=core.js.map
/***/ }),
/***/ 471:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = authenticationBeforeRequest;
const btoa = __webpack_require__(675);
const uniq = __webpack_require__(126);
function authenticationBeforeRequest(state, options) {
if (!state.auth.type) {
return;
}
if (state.auth.type === "basic") {
const hash = btoa(`${state.auth.username}:${state.auth.password}`);
options.headers.authorization = `Basic ${hash}`;
return;
}
if (state.auth.type === "token") {
options.headers.authorization = `token ${state.auth.token}`;
return;
}
if (state.auth.type === "app") {
options.headers.authorization = `Bearer ${state.auth.token}`;
const acceptHeaders = options.headers.accept
.split(",")
.concat("application/vnd.github.machine-man-preview+json");
options.headers.accept = uniq(acceptHeaders)
.filter(Boolean)
.join(",");
return;
}
options.url += options.url.indexOf("?") === -1 ? "?" : "&";
if (state.auth.token) {
options.url += `access_token=${encodeURIComponent(state.auth.token)}`;
return;
}
const key = encodeURIComponent(state.auth.key);
const secret = encodeURIComponent(state.auth.secret);
options.url += `client_id=${key}&client_secret=${secret}`;
}
/***/ }),
/***/ 474:
/***/ (function(module) {
"use strict";
module.exports = object => {
const result = {};
for (const [key, value] of Object.entries(object)) {
result[key.toLowerCase()] = value;
}
return result;
};
/***/ }),
/***/ 489:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const path = __webpack_require__(622);
const which = __webpack_require__(814);
const pathKey = __webpack_require__(39)();
function resolveCommandAttempt(parsed, withoutPathExt) {
const cwd = process.cwd();
const hasCustomCwd = parsed.options.cwd != null;
// If a custom `cwd` was specified, we need to change the process cwd
// because `which` will do stat calls but does not support a custom cwd
if (hasCustomCwd) {
try {
process.chdir(parsed.options.cwd);
} catch (err) {
/* Empty */
}
}
let resolved;
try {
resolved = which.sync(parsed.command, {
path: (parsed.options.env || process.env)[pathKey],
pathExt: withoutPathExt ? path.delimiter : undefined,
});
} catch (e) {
/* Empty */
} finally {
process.chdir(cwd);
}
// If we successfully resolved, ensure that an absolute path is returned
// Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
if (resolved) {
resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
}
return resolved;
}
function resolveCommand(parsed) {
return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
}
module.exports = resolveCommand;
/***/ }),
/***/ 490:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const defer_to_connect_1 = __webpack_require__(790);
const nodejsMajorVersion = Number(process.versions.node.split('.')[0]);
const timer = (request) => {
const timings = {
start: Date.now(),
socket: undefined,
lookup: undefined,
connect: undefined,
secureConnect: undefined,
upload: undefined,
response: undefined,
end: undefined,
error: undefined,
abort: undefined,
phases: {
wait: undefined,
dns: undefined,
tcp: undefined,
tls: undefined,
request: undefined,
firstByte: undefined,
download: undefined,
total: undefined
}
};
request.timings = timings;
const handleError = (origin) => {
const emit = origin.emit.bind(origin);
origin.emit = (event, ...args) => {
// Catches the `error` event
if (event === 'error') {
timings.error = Date.now();
timings.phases.total = timings.error - timings.start;
origin.emit = emit;
}
// Saves the original behavior
return emit(event, ...args);
};
};
handleError(request);
request.prependOnceListener('abort', () => {
timings.abort = Date.now();
// Let the `end` response event be responsible for setting the total phase,
// unless the Node.js major version is >= 13.
if (!timings.response || nodejsMajorVersion >= 13) {
timings.phases.total = Date.now() - timings.start;
}
});
const onSocket = (socket) => {
timings.socket = Date.now();
timings.phases.wait = timings.socket - timings.start;
const lookupListener = () => {
timings.lookup = Date.now();
timings.phases.dns = timings.lookup - timings.socket;
};
socket.prependOnceListener('lookup', lookupListener);
defer_to_connect_1.default(socket, {
connect: () => {
timings.connect = Date.now();
if (timings.lookup === undefined) {
socket.removeListener('lookup', lookupListener);
timings.lookup = timings.connect;
timings.phases.dns = timings.lookup - timings.socket;
}
timings.phases.tcp = timings.connect - timings.lookup;
// This callback is called before flushing any data,
// so we don't need to set `timings.phases.request` here.
},
secureConnect: () => {
timings.secureConnect = Date.now();
timings.phases.tls = timings.secureConnect - timings.connect;
}
});
};
if (request.socket) {
onSocket(request.socket);
}
else {
request.prependOnceListener('socket', onSocket);
}
const onUpload = () => {
var _a;
timings.upload = Date.now();
timings.phases.request = timings.upload - (_a = timings.secureConnect, (_a !== null && _a !== void 0 ? _a : timings.connect));
};
const writableFinished = () => {
if (typeof request.writableFinished === 'boolean') {
return request.writableFinished;
}
// Node.js doesn't have `request.writableFinished` property
return request.finished && request.outputSize === 0 && (!request.socket || request.socket.writableLength === 0);
};
if (writableFinished()) {
onUpload();
}
else {
request.prependOnceListener('finish', onUpload);
}
request.prependOnceListener('response', (response) => {
timings.response = Date.now();
timings.phases.firstByte = timings.response - timings.upload;
response.timings = timings;
handleError(response);
response.prependOnceListener('end', () => {
timings.end = Date.now();
timings.phases.download = timings.end - timings.response;
timings.phases.total = timings.end - timings.start;
});
});
return timings;
};
exports.default = timer;
// For CommonJS default export support
module.exports = timer;
module.exports.default = timer;
/***/ }),
/***/ 507:
/***/ (function(module) {
"use strict";
/* istanbul ignore file: https://github.com/nodejs/node/blob/a91293d4d9ab403046ab5eb022332e4e3d249bd3/lib/internal/url.js#L1257 */
module.exports = url => {
const options = {
protocol: url.protocol,
hostname: typeof url.hostname === 'string' && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
host: url.host,
hash: url.hash,
search: url.search,
pathname: url.pathname,
href: url.href,
path: `${url.pathname || ''}${url.search || ''}`
};
if (typeof url.port === 'string' && url.port.length !== 0) {
options.port = Number(url.port);
}
if (url.username || url.password) {
options.auth = `${url.username || ''}:${url.password || ''}`;
}
return options;
};
/***/ }),
/***/ 510:
/***/ (function(module) {
module.exports = addHook
function addHook (state, kind, name, hook) {
var orig = hook
if (!state.registry[name]) {
state.registry[name] = []
}
if (kind === 'before') {
hook = function (method, options) {
return Promise.resolve()
.then(orig.bind(null, options))
.then(method.bind(null, options))
}
}
if (kind === 'after') {
hook = function (method, options) {
var result
return Promise.resolve()
.then(method.bind(null, options))
.then(function (result_) {
result = result_
return orig(result, options)
})
.then(function () {
return result
})
}
}
if (kind === 'error') {
hook = function (method, options) {
return Promise.resolve()
.then(method.bind(null, options))
.catch(function (error) {
return orig(error, options)
})
}
}
state.registry[name].push({
hook: hook,
orig: orig
})
}
/***/ }),
/***/ 523:
/***/ (function(module, __unusedexports, __webpack_require__) {
var register = __webpack_require__(363)
var addHook = __webpack_require__(510)
var removeHook = __webpack_require__(763)
// bind with array of arguments: https://stackoverflow.com/a/21792913
var bind = Function.bind
var bindable = bind.bind(bind)
function bindApi (hook, state, name) {
var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])
hook.api = { remove: removeHookRef }
hook.remove = removeHookRef
;['before', 'error', 'after', 'wrap'].forEach(function (kind) {
var args = name ? [state, kind, name] : [state, kind]
hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)
})
}
function HookSingular () {
var singularHookName = 'h'
var singularHookState = {
registry: {}
}
var singularHook = register.bind(null, singularHookState, singularHookName)
bindApi(singularHook, singularHookState, singularHookName)
return singularHook
}
function HookCollection () {
var state = {
registry: {}
}
var hook = register.bind(null, state)
bindApi(hook, state)
return hook
}
var collectionHookDeprecationMessageDisplayed = false
function Hook () {
if (!collectionHookDeprecationMessageDisplayed) {
console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4')
collectionHookDeprecationMessageDisplayed = true
}
return HookCollection()
}
Hook.Singular = HookSingular.bind()
Hook.Collection = HookCollection.bind()
module.exports = Hook
// expose constructors as a named property for TypeScript
module.exports.Hook = Hook
module.exports.Singular = Hook.Singular
module.exports.Collection = Hook.Collection
/***/ }),
/***/ 524:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const tls = __webpack_require__(16);
module.exports = (options = {}) => new Promise((resolve, reject) => {
const socket = tls.connect(options, () => {
if (options.resolveSocket) {
socket.off('error', reject);
resolve({alpnProtocol: socket.alpnProtocol, socket});
} else {
socket.destroy();
resolve({alpnProtocol: socket.alpnProtocol});
}
});
socket.on('error', reject);
});
/***/ }),
/***/ 529:
/***/ (function(module, __unusedexports, __webpack_require__) {
const factory = __webpack_require__(47);
module.exports = factory();
/***/ }),
/***/ 534:
/***/ (function(module, exports) {
"use strict";
/// <reference lib="es2018"/>
/// <reference lib="dom"/>
/// <reference types="node"/>
Object.defineProperty(exports, "__esModule", { value: true });
const { toString } = Object.prototype;
const isOfType = (type) => (value) => typeof value === type;
const getObjectType = (value) => {
const objectName = toString.call(value).slice(8, -1);
if (objectName) {
return objectName;
}
return undefined;
};
const isObjectOfType = (type) => (value) => getObjectType(value) === type;
function is(value) {
switch (value) {
case null:
return "null" /* null */;
case true:
case false:
return "boolean" /* boolean */;
default:
}
switch (typeof value) {
case 'undefined':
return "undefined" /* undefined */;
case 'string':
return "string" /* string */;
case 'number':
return "number" /* number */;
case 'bigint':
return "bigint" /* bigint */;
case 'symbol':
return "symbol" /* symbol */;
default:
}
if (is.function_(value)) {
return "Function" /* Function */;
}
if (is.observable(value)) {
return "Observable" /* Observable */;
}
if (is.array(value)) {
return "Array" /* Array */;
}
if (is.buffer(value)) {
return "Buffer" /* Buffer */;
}
const tagType = getObjectType(value);
if (tagType) {
return tagType;
}
if (value instanceof String || value instanceof Boolean || value instanceof Number) {
throw new TypeError('Please don\'t use object wrappers for primitive types');
}
return "Object" /* Object */;
}
is.undefined = isOfType('undefined');
is.string = isOfType('string');
const isNumberType = isOfType('number');
is.number = (value) => isNumberType(value) && !is.nan(value);
is.bigint = isOfType('bigint');
// eslint-disable-next-line @typescript-eslint/ban-types
is.function_ = isOfType('function');
is.null_ = (value) => value === null;
is.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');
is.boolean = (value) => value === true || value === false;
is.symbol = isOfType('symbol');
is.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
is.array = Array.isArray;
is.buffer = (value) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = value) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.isBuffer) === null || _c === void 0 ? void 0 : _c.call(_b, value)) !== null && _d !== void 0 ? _d : false; };
is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value);
is.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value));
is.iterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.iterator]); };
is.asyncIterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.asyncIterator]); };
is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw);
is.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);
is.nativePromise = (value) => isObjectOfType("Promise" /* Promise */)(value);
const hasPromiseAPI = (value) => {
var _a, _b;
return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a.then) &&
is.function_((_b = value) === null || _b === void 0 ? void 0 : _b.catch);
};
is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value);
is.generatorFunction = isObjectOfType("GeneratorFunction" /* GeneratorFunction */);
is.asyncGeneratorFunction = (value) => getObjectType(value) === "AsyncGeneratorFunction" /* AsyncGeneratorFunction */;
is.asyncFunction = (value) => getObjectType(value) === "AsyncFunction" /* AsyncFunction */;
// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types
is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');
is.regExp = isObjectOfType("RegExp" /* RegExp */);
is.date = isObjectOfType("Date" /* Date */);
is.error = isObjectOfType("Error" /* Error */);
is.map = (value) => isObjectOfType("Map" /* Map */)(value);
is.set = (value) => isObjectOfType("Set" /* Set */)(value);
is.weakMap = (value) => isObjectOfType("WeakMap" /* WeakMap */)(value);
is.weakSet = (value) => isObjectOfType("WeakSet" /* WeakSet */)(value);
is.int8Array = isObjectOfType("Int8Array" /* Int8Array */);
is.uint8Array = isObjectOfType("Uint8Array" /* Uint8Array */);
is.uint8ClampedArray = isObjectOfType("Uint8ClampedArray" /* Uint8ClampedArray */);
is.int16Array = isObjectOfType("Int16Array" /* Int16Array */);
is.uint16Array = isObjectOfType("Uint16Array" /* Uint16Array */);
is.int32Array = isObjectOfType("Int32Array" /* Int32Array */);
is.uint32Array = isObjectOfType("Uint32Array" /* Uint32Array */);
is.float32Array = isObjectOfType("Float32Array" /* Float32Array */);
is.float64Array = isObjectOfType("Float64Array" /* Float64Array */);
is.bigInt64Array = isObjectOfType("BigInt64Array" /* BigInt64Array */);
is.bigUint64Array = isObjectOfType("BigUint64Array" /* BigUint64Array */);
is.arrayBuffer = isObjectOfType("ArrayBuffer" /* ArrayBuffer */);
is.sharedArrayBuffer = isObjectOfType("SharedArrayBuffer" /* SharedArrayBuffer */);
is.dataView = isObjectOfType("DataView" /* DataView */);
is.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;
is.urlInstance = (value) => isObjectOfType("URL" /* URL */)(value);
is.urlString = (value) => {
if (!is.string(value)) {
return false;
}
try {
new URL(value); // eslint-disable-line no-new
return true;
}
catch (_a) {
return false;
}
};
// TODO: Use the `not` operator with a type guard here when it's available.
// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
is.truthy = (value) => Boolean(value);
// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
is.falsy = (value) => !value;
is.nan = (value) => Number.isNaN(value);
const primitiveTypeOfTypes = new Set([
'undefined',
'string',
'number',
'bigint',
'boolean',
'symbol'
]);
is.primitive = (value) => is.null_(value) || primitiveTypeOfTypes.has(typeof value);
is.integer = (value) => Number.isInteger(value);
is.safeInteger = (value) => Number.isSafeInteger(value);
is.plainObject = (value) => {
// From: https://github.com/sindresorhus/is-plain-obj/blob/master/index.js
if (getObjectType(value) !== "Object" /* Object */) {
return false;
}
const prototype = Object.getPrototypeOf(value);
return prototype === null || prototype === Object.getPrototypeOf({});
};
const typedArrayTypes = new Set([
"Int8Array" /* Int8Array */,
"Uint8Array" /* Uint8Array */,
"Uint8ClampedArray" /* Uint8ClampedArray */,
"Int16Array" /* Int16Array */,
"Uint16Array" /* Uint16Array */,
"Int32Array" /* Int32Array */,
"Uint32Array" /* Uint32Array */,
"Float32Array" /* Float32Array */,
"Float64Array" /* Float64Array */,
"BigInt64Array" /* BigInt64Array */,
"BigUint64Array" /* BigUint64Array */
]);
is.typedArray = (value) => {
const objectType = getObjectType(value);
if (objectType === undefined) {
return false;
}
return typedArrayTypes.has(objectType);
};
const isValidLength = (value) => is.safeInteger(value) && value >= 0;
is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);
is.inRange = (value, range) => {
if (is.number(range)) {
return value >= Math.min(0, range) && value <= Math.max(range, 0);
}
if (is.array(range) && range.length === 2) {
return value >= Math.min(...range) && value <= Math.max(...range);
}
throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
};
const NODE_TYPE_ELEMENT = 1;
const DOM_PROPERTIES_TO_CHECK = [
'innerHTML',
'ownerDocument',
'style',
'attributes',
'nodeValue'
];
is.domElement = (value) => is.object(value) && value.nodeType === NODE_TYPE_ELEMENT && is.string(value.nodeName) &&
!is.plainObject(value) && DOM_PROPERTIES_TO_CHECK.every(property => property in value);
is.observable = (value) => {
var _a, _b, _c, _d;
if (!value) {
return false;
}
// eslint-disable-next-line no-use-extend-native/no-use-extend-native
if (value === ((_b = (_a = value)[Symbol.observable]) === null || _b === void 0 ? void 0 : _b.call(_a))) {
return true;
}
if (value === ((_d = (_c = value)['@@observable']) === null || _d === void 0 ? void 0 : _d.call(_c))) {
return true;
}
return false;
};
is.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);
is.infinite = (value) => value === Infinity || value === -Infinity;
const isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;
is.evenInteger = isAbsoluteMod2(0);
is.oddInteger = isAbsoluteMod2(1);
is.emptyArray = (value) => is.array(value) && value.length === 0;
is.nonEmptyArray = (value) => is.array(value) && value.length > 0;
is.emptyString = (value) => is.string(value) && value.length === 0;
// TODO: Use `not ''` when the `not` operator is available.
is.nonEmptyString = (value) => is.string(value) && value.length > 0;
const isWhiteSpaceString = (value) => is.string(value) && !/\S/.test(value);
is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);
is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;
// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
// - https://github.com/Microsoft/TypeScript/pull/29317
is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;
is.emptySet = (value) => is.set(value) && value.size === 0;
is.nonEmptySet = (value) => is.set(value) && value.size > 0;
is.emptyMap = (value) => is.map(value) && value.size === 0;
is.nonEmptyMap = (value) => is.map(value) && value.size > 0;
const predicateOnArray = (method, predicate, values) => {
if (!is.function_(predicate)) {
throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
}
if (values.length === 0) {
throw new TypeError('Invalid number of values');
}
return method.call(values, predicate);
};
is.any = (predicate, ...values) => {
const predicates = is.array(predicate) ? predicate : [predicate];
return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));
};
is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);
const assertType = (condition, description, value) => {
if (!condition) {
throw new TypeError(`Expected value which is \`${description}\`, received value of type \`${is(value)}\`.`);
}
};
exports.assert = {
// Unknowns.
undefined: (value) => assertType(is.undefined(value), "undefined" /* undefined */, value),
string: (value) => assertType(is.string(value), "string" /* string */, value),
number: (value) => assertType(is.number(value), "number" /* number */, value),
bigint: (value) => assertType(is.bigint(value), "bigint" /* bigint */, value),
// eslint-disable-next-line @typescript-eslint/ban-types
function_: (value) => assertType(is.function_(value), "Function" /* Function */, value),
null_: (value) => assertType(is.null_(value), "null" /* null */, value),
class_: (value) => assertType(is.class_(value), "Class" /* class_ */, value),
boolean: (value) => assertType(is.boolean(value), "boolean" /* boolean */, value),
symbol: (value) => assertType(is.symbol(value), "symbol" /* symbol */, value),
numericString: (value) => assertType(is.numericString(value), "string with a number" /* numericString */, value),
array: (value) => assertType(is.array(value), "Array" /* Array */, value),
buffer: (value) => assertType(is.buffer(value), "Buffer" /* Buffer */, value),
nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), "null or undefined" /* nullOrUndefined */, value),
object: (value) => assertType(is.object(value), "Object" /* Object */, value),
iterable: (value) => assertType(is.iterable(value), "Iterable" /* iterable */, value),
asyncIterable: (value) => assertType(is.asyncIterable(value), "AsyncIterable" /* asyncIterable */, value),
generator: (value) => assertType(is.generator(value), "Generator" /* Generator */, value),
asyncGenerator: (value) => assertType(is.asyncGenerator(value), "AsyncGenerator" /* AsyncGenerator */, value),
nativePromise: (value) => assertType(is.nativePromise(value), "native Promise" /* nativePromise */, value),
promise: (value) => assertType(is.promise(value), "Promise" /* Promise */, value),
generatorFunction: (value) => assertType(is.generatorFunction(value), "GeneratorFunction" /* GeneratorFunction */, value),
asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), "AsyncGeneratorFunction" /* AsyncGeneratorFunction */, value),
// eslint-disable-next-line @typescript-eslint/ban-types
asyncFunction: (value) => assertType(is.asyncFunction(value), "AsyncFunction" /* AsyncFunction */, value),
// eslint-disable-next-line @typescript-eslint/ban-types
boundFunction: (value) => assertType(is.boundFunction(value), "Function" /* Function */, value),
regExp: (value) => assertType(is.regExp(value), "RegExp" /* RegExp */, value),
date: (value) => assertType(is.date(value), "Date" /* Date */, value),
error: (value) => assertType(is.error(value), "Error" /* Error */, value),
map: (value) => assertType(is.map(value), "Map" /* Map */, value),
set: (value) => assertType(is.set(value), "Set" /* Set */, value),
weakMap: (value) => assertType(is.weakMap(value), "WeakMap" /* WeakMap */, value),
weakSet: (value) => assertType(is.weakSet(value), "WeakSet" /* WeakSet */, value),
int8Array: (value) => assertType(is.int8Array(value), "Int8Array" /* Int8Array */, value),
uint8Array: (value) => assertType(is.uint8Array(value), "Uint8Array" /* Uint8Array */, value),
uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), "Uint8ClampedArray" /* Uint8ClampedArray */, value),
int16Array: (value) => assertType(is.int16Array(value), "Int16Array" /* Int16Array */, value),
uint16Array: (value) => assertType(is.uint16Array(value), "Uint16Array" /* Uint16Array */, value),
int32Array: (value) => assertType(is.int32Array(value), "Int32Array" /* Int32Array */, value),
uint32Array: (value) => assertType(is.uint32Array(value), "Uint32Array" /* Uint32Array */, value),
float32Array: (value) => assertType(is.float32Array(value), "Float32Array" /* Float32Array */, value),
float64Array: (value) => assertType(is.float64Array(value), "Float64Array" /* Float64Array */, value),
bigInt64Array: (value) => assertType(is.bigInt64Array(value), "BigInt64Array" /* BigInt64Array */, value),
bigUint64Array: (value) => assertType(is.bigUint64Array(value), "BigUint64Array" /* BigUint64Array */, value),
arrayBuffer: (value) => assertType(is.arrayBuffer(value), "ArrayBuffer" /* ArrayBuffer */, value),
sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), "SharedArrayBuffer" /* SharedArrayBuffer */, value),
dataView: (value) => assertType(is.dataView(value), "DataView" /* DataView */, value),
urlInstance: (value) => assertType(is.urlInstance(value), "URL" /* URL */, value),
urlString: (value) => assertType(is.urlString(value), "string with a URL" /* urlString */, value),
truthy: (value) => assertType(is.truthy(value), "truthy" /* truthy */, value),
falsy: (value) => assertType(is.falsy(value), "falsy" /* falsy */, value),
nan: (value) => assertType(is.nan(value), "NaN" /* nan */, value),
primitive: (value) => assertType(is.primitive(value), "primitive" /* primitive */, value),
integer: (value) => assertType(is.integer(value), "integer" /* integer */, value),
safeInteger: (value) => assertType(is.safeInteger(value), "integer" /* safeInteger */, value),
plainObject: (value) => assertType(is.plainObject(value), "plain object" /* plainObject */, value),
typedArray: (value) => assertType(is.typedArray(value), "TypedArray" /* typedArray */, value),
arrayLike: (value) => assertType(is.arrayLike(value), "array-like" /* arrayLike */, value),
domElement: (value) => assertType(is.domElement(value), "Element" /* domElement */, value),
observable: (value) => assertType(is.observable(value), "Observable" /* Observable */, value),
nodeStream: (value) => assertType(is.nodeStream(value), "Node.js Stream" /* nodeStream */, value),
infinite: (value) => assertType(is.infinite(value), "infinite number" /* infinite */, value),
emptyArray: (value) => assertType(is.emptyArray(value), "empty array" /* emptyArray */, value),
nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), "non-empty array" /* nonEmptyArray */, value),
emptyString: (value) => assertType(is.emptyString(value), "empty string" /* emptyString */, value),
nonEmptyString: (value) => assertType(is.nonEmptyString(value), "non-empty string" /* nonEmptyString */, value),
emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), "empty string or whitespace" /* emptyStringOrWhitespace */, value),
emptyObject: (value) => assertType(is.emptyObject(value), "empty object" /* emptyObject */, value),
nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), "non-empty object" /* nonEmptyObject */, value),
emptySet: (value) => assertType(is.emptySet(value), "empty set" /* emptySet */, value),
nonEmptySet: (value) => assertType(is.nonEmptySet(value), "non-empty set" /* nonEmptySet */, value),
emptyMap: (value) => assertType(is.emptyMap(value), "empty map" /* emptyMap */, value),
nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), "non-empty map" /* nonEmptyMap */, value),
// Numbers.
evenInteger: (value) => assertType(is.evenInteger(value), "even integer" /* evenInteger */, value),
oddInteger: (value) => assertType(is.oddInteger(value), "odd integer" /* oddInteger */, value),
// Two arguments.
directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), "T" /* directInstanceOf */, instance),
inRange: (value, range) => assertType(is.inRange(value, range), "in range" /* inRange */, value),
// Variadic functions.
any: (predicate, ...values) => assertType(is.any(predicate, ...values), "predicate returns truthy for any value" /* any */, values),
all: (predicate, ...values) => assertType(is.all(predicate, ...values), "predicate returns truthy for all values" /* all */, values)
};
// Some few keywords are reserved, but we'll populate them for Node.js users
// See https://github.com/Microsoft/TypeScript/issues/2536
Object.defineProperties(is, {
class: {
value: is.class_
},
function: {
value: is.function_
},
null: {
value: is.null_
}
});
Object.defineProperties(exports.assert, {
class: {
value: exports.assert.class_
},
function: {
value: exports.assert.function_
},
null: {
value: exports.assert.null_
}
});
exports.default = is;
// For CommonJS default export support
module.exports = is;
module.exports.default = is;
module.exports.assert = exports.assert;
/***/ }),
/***/ 536:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = hasFirstPage
const deprecate = __webpack_require__(370)
const getPageLinks = __webpack_require__(577)
function hasFirstPage (link) {
deprecate(`octokit.hasFirstPage() You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
return getPageLinks(link).first
}
/***/ }),
/***/ 539:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const url = __webpack_require__(835);
const http = __webpack_require__(605);
const https = __webpack_require__(211);
const pm = __webpack_require__(950);
let tunnel;
var HttpCodes;
(function (HttpCodes) {
HttpCodes[HttpCodes["OK"] = 200] = "OK";
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
var Headers;
(function (Headers) {
Headers["Accept"] = "accept";
Headers["ContentType"] = "content-type";
})(Headers = exports.Headers || (exports.Headers = {}));
var MediaTypes;
(function (MediaTypes) {
MediaTypes["ApplicationJson"] = "application/json";
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
/**
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
*/
function getProxyUrl(serverUrl) {
let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
return proxyUrl ? proxyUrl.href : '';
}
exports.getProxyUrl = getProxyUrl;
const HttpRedirectCodes = [
HttpCodes.MovedPermanently,
HttpCodes.ResourceMoved,
HttpCodes.SeeOther,
HttpCodes.TemporaryRedirect,
HttpCodes.PermanentRedirect
];
const HttpResponseRetryCodes = [
HttpCodes.BadGateway,
HttpCodes.ServiceUnavailable,
HttpCodes.GatewayTimeout
];
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
const ExponentialBackoffCeiling = 10;
const ExponentialBackoffTimeSlice = 5;
class HttpClientResponse {
constructor(message) {
this.message = message;
}
readBody() {
return new Promise(async (resolve, reject) => {
let output = Buffer.alloc(0);
this.message.on('data', (chunk) => {
output = Buffer.concat([output, chunk]);
});
this.message.on('end', () => {
resolve(output.toString());
});
});
}
}
exports.HttpClientResponse = HttpClientResponse;
function isHttps(requestUrl) {
let parsedUrl = url.parse(requestUrl);
return parsedUrl.protocol === 'https:';
}
exports.isHttps = isHttps;
class HttpClient {
constructor(userAgent, handlers, requestOptions) {
this._ignoreSslError = false;
this._allowRedirects = true;
this._allowRedirectDowngrade = false;
this._maxRedirects = 50;
this._allowRetries = false;
this._maxRetries = 1;
this._keepAlive = false;
this._disposed = false;
this.userAgent = userAgent;
this.handlers = handlers || [];
this.requestOptions = requestOptions;
if (requestOptions) {
if (requestOptions.ignoreSslError != null) {
this._ignoreSslError = requestOptions.ignoreSslError;
}
this._socketTimeout = requestOptions.socketTimeout;
if (requestOptions.allowRedirects != null) {
this._allowRedirects = requestOptions.allowRedirects;
}
if (requestOptions.allowRedirectDowngrade != null) {
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
}
if (requestOptions.maxRedirects != null) {
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
}
if (requestOptions.keepAlive != null) {
this._keepAlive = requestOptions.keepAlive;
}
if (requestOptions.allowRetries != null) {
this._allowRetries = requestOptions.allowRetries;
}
if (requestOptions.maxRetries != null) {
this._maxRetries = requestOptions.maxRetries;
}
}
}
options(requestUrl, additionalHeaders) {
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
}
get(requestUrl, additionalHeaders) {
return this.request('GET', requestUrl, null, additionalHeaders || {});
}
del(requestUrl, additionalHeaders) {
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
}
post(requestUrl, data, additionalHeaders) {
return this.request('POST', requestUrl, data, additionalHeaders || {});
}
patch(requestUrl, data, additionalHeaders) {
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
}
put(requestUrl, data, additionalHeaders) {
return this.request('PUT', requestUrl, data, additionalHeaders || {});
}
head(requestUrl, additionalHeaders) {
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
}
sendStream(verb, requestUrl, stream, additionalHeaders) {
return this.request(verb, requestUrl, stream, additionalHeaders);
}
/**
* Gets a typed object from an endpoint
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
*/
async getJson(requestUrl, additionalHeaders = {}) {
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
let res = await this.get(requestUrl, additionalHeaders);
return this._processResponse(res, this.requestOptions);
}
async postJson(requestUrl, obj, additionalHeaders = {}) {
let data = JSON.stringify(obj, null, 2);
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
let res = await this.post(requestUrl, data, additionalHeaders);
return this._processResponse(res, this.requestOptions);
}
async putJson(requestUrl, obj, additionalHeaders = {}) {
let data = JSON.stringify(obj, null, 2);
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
let res = await this.put(requestUrl, data, additionalHeaders);
return this._processResponse(res, this.requestOptions);
}
async patchJson(requestUrl, obj, additionalHeaders = {}) {
let data = JSON.stringify(obj, null, 2);
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
let res = await this.patch(requestUrl, data, additionalHeaders);
return this._processResponse(res, this.requestOptions);
}
/**
* Makes a raw http request.
* All other methods such as get, post, patch, and request ultimately call this.
* Prefer get, del, post and patch
*/
async request(verb, requestUrl, data, headers) {
if (this._disposed) {
throw new Error('Client has already been disposed.');
}
let parsedUrl = url.parse(requestUrl);
let info = this._prepareRequest(verb, parsedUrl, headers);
// Only perform retries on reads since writes may not be idempotent.
let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
? this._maxRetries + 1
: 1;
let numTries = 0;
let response;
while (numTries < maxTries) {
response = await this.requestRaw(info, data);
// Check if it's an authentication challenge
if (response &&
response.message &&
response.message.statusCode === HttpCodes.Unauthorized) {
let authenticationHandler;
for (let i = 0; i < this.handlers.length; i++) {
if (this.handlers[i].canHandleAuthentication(response)) {
authenticationHandler = this.handlers[i];
break;
}
}
if (authenticationHandler) {
return authenticationHandler.handleAuthentication(this, info, data);
}
else {
// We have received an unauthorized response but have no handlers to handle it.
// Let the response return to the caller.
return response;
}
}
let redirectsRemaining = this._maxRedirects;
while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
this._allowRedirects &&
redirectsRemaining > 0) {
const redirectUrl = response.message.headers['location'];
if (!redirectUrl) {
// if there's no location to redirect to, we won't
break;
}
let parsedRedirectUrl = url.parse(redirectUrl);
if (parsedUrl.protocol == 'https:' &&
parsedUrl.protocol != parsedRedirectUrl.protocol &&
!this._allowRedirectDowngrade) {
throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
}
// we need to finish reading the response before reassigning response
// which will leak the open socket.
await response.readBody();
// strip authorization header if redirected to a different hostname
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
for (let header in headers) {
// header names are case insensitive
if (header.toLowerCase() === 'authorization') {
delete headers[header];
}
}
}
// let's make the request with the new redirectUrl
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
response = await this.requestRaw(info, data);
redirectsRemaining--;
}
if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
// If not a retry code, return immediately instead of retrying
return response;
}
numTries += 1;
if (numTries < maxTries) {
await response.readBody();
await this._performExponentialBackoff(numTries);
}
}
return response;
}
/**
* Needs to be called if keepAlive is set to true in request options.
*/
dispose() {
if (this._agent) {
this._agent.destroy();
}
this._disposed = true;
}
/**
* Raw request.
* @param info
* @param data
*/
requestRaw(info, data) {
return new Promise((resolve, reject) => {
let callbackForResult = function (err, res) {
if (err) {
reject(err);
}
resolve(res);
};
this.requestRawWithCallback(info, data, callbackForResult);
});
}
/**
* Raw request with callback.
* @param info
* @param data
* @param onResult
*/
requestRawWithCallback(info, data, onResult) {
let socket;
if (typeof data === 'string') {
info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
}
let callbackCalled = false;
let handleResult = (err, res) => {
if (!callbackCalled) {
callbackCalled = true;
onResult(err, res);
}
};
let req = info.httpModule.request(info.options, (msg) => {
let res = new HttpClientResponse(msg);
handleResult(null, res);
});
req.on('socket', sock => {
socket = sock;
});
// If we ever get disconnected, we want the socket to timeout eventually
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
if (socket) {
socket.end();
}
handleResult(new Error('Request timeout: ' + info.options.path), null);
});
req.on('error', function (err) {
// err has statusCode property
// res should have headers
handleResult(err, null);
});
if (data && typeof data === 'string') {
req.write(data, 'utf8');
}
if (data && typeof data !== 'string') {
data.on('close', function () {
req.end();
});
data.pipe(req);
}
else {
req.end();
}
}
/**
* Gets an http agent. This function is useful when you need an http agent that handles
* routing through a proxy server - depending upon the url and proxy environment variables.
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
*/
getAgent(serverUrl) {
let parsedUrl = url.parse(serverUrl);
return this._getAgent(parsedUrl);
}
_prepareRequest(method, requestUrl, headers) {
const info = {};
info.parsedUrl = requestUrl;
const usingSsl = info.parsedUrl.protocol === 'https:';
info.httpModule = usingSsl ? https : http;
const defaultPort = usingSsl ? 443 : 80;
info.options = {};
info.options.host = info.parsedUrl.hostname;
info.options.port = info.parsedUrl.port
? parseInt(info.parsedUrl.port)
: defaultPort;
info.options.path =
(info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
info.options.method = method;
info.options.headers = this._mergeHeaders(headers);
if (this.userAgent != null) {
info.options.headers['user-agent'] = this.userAgent;
}
info.options.agent = this._getAgent(info.parsedUrl);
// gives handlers an opportunity to participate
if (this.handlers) {
this.handlers.forEach(handler => {
handler.prepareRequest(info.options);
});
}
return info;
}
_mergeHeaders(headers) {
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
if (this.requestOptions && this.requestOptions.headers) {
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
}
return lowercaseKeys(headers || {});
}
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
let clientHeader;
if (this.requestOptions && this.requestOptions.headers) {
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
}
return additionalHeaders[header] || clientHeader || _default;
}
_getAgent(parsedUrl) {
let agent;
let proxyUrl = pm.getProxyUrl(parsedUrl);
let useProxy = proxyUrl && proxyUrl.hostname;
if (this._keepAlive && useProxy) {
agent = this._proxyAgent;
}
if (this._keepAlive && !useProxy) {
agent = this._agent;
}
// if agent is already assigned use that agent.
if (!!agent) {
return agent;
}
const usingSsl = parsedUrl.protocol === 'https:';
let maxSockets = 100;
if (!!this.requestOptions) {
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
}
if (useProxy) {
// If using proxy, need tunnel
if (!tunnel) {
tunnel = __webpack_require__(856);
}
const agentOptions = {
maxSockets: maxSockets,
keepAlive: this._keepAlive,
proxy: {
proxyAuth: proxyUrl.auth,
host: proxyUrl.hostname,
port: proxyUrl.port
}
};
let tunnelAgent;
const overHttps = proxyUrl.protocol === 'https:';
if (usingSsl) {
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
}
else {
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
}
agent = tunnelAgent(agentOptions);
this._proxyAgent = agent;
}
// if reusing agent across request and tunneling agent isn't assigned create a new agent
if (this._keepAlive && !agent) {
const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
this._agent = agent;
}
// if not using private agent and tunnel agent isn't setup then use global agent
if (!agent) {
agent = usingSsl ? https.globalAgent : http.globalAgent;
}
if (usingSsl && this._ignoreSslError) {
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
// we have to cast it to any and change it directly
agent.options = Object.assign(agent.options || {}, {
rejectUnauthorized: false
});
}
return agent;
}
_performExponentialBackoff(retryNumber) {
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
return new Promise(resolve => setTimeout(() => resolve(), ms));
}
static dateTimeDeserializer(key, value) {
if (typeof value === 'string') {
let a = new Date(value);
if (!isNaN(a.valueOf())) {
return a;
}
}
return value;
}
async _processResponse(res, options) {
return new Promise(async (resolve, reject) => {
const statusCode = res.message.statusCode;
const response = {
statusCode: statusCode,
result: null,
headers: {}
};
// not found leads to null obj returned
if (statusCode == HttpCodes.NotFound) {
resolve(response);
}
let obj;
let contents;
// get the result from the body
try {
contents = await res.readBody();
if (contents && contents.length > 0) {
if (options && options.deserializeDates) {
obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
}
else {
obj = JSON.parse(contents);
}
response.result = obj;
}
response.headers = res.message.headers;
}
catch (err) {
// Invalid resource (contents not json); leaving result obj null
}
// note that 3xx redirects are handled by the http layer.
if (statusCode > 299) {
let msg;
// if exception/error in body, attempt to get better error
if (obj && obj.message) {
msg = obj.message;
}
else if (contents && contents.length > 0) {
// it may be the case that the exception is in the body message as string
msg = contents;
}
else {
msg = 'Failed request: (' + statusCode + ')';
}
let err = new Error(msg);
// attach statusCode and body obj (if available) to the error object
err['statusCode'] = statusCode;
if (response.result) {
err['result'] = response.result;
}
reject(err);
}
else {
resolve(response);
}
});
}
}
2020-06-11 09:37:37 +02:00
exports.HttpClient = HttpClient;
/***/ }),
/***/ 550:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = getNextPage
const getPage = __webpack_require__(265)
function getNextPage (octokit, link, headers) {
return getPage(octokit, link, 'next', headers)
}
/***/ }),
/***/ 557:
/***/ (function(module) {
"use strict";
class CancelError extends Error {
constructor(reason) {
super(reason || 'Promise was canceled');
this.name = 'CancelError';
}
get isCanceled() {
return true;
}
}
2020-06-11 09:37:37 +02:00
class PCancelable {
static fn(userFn) {
return (...arguments_) => {
return new PCancelable((resolve, reject, onCancel) => {
arguments_.push(onCancel);
// eslint-disable-next-line promise/prefer-await-to-then
userFn(...arguments_).then(resolve, reject);
});
};
}
2020-06-11 09:37:37 +02:00
constructor(executor) {
this._cancelHandlers = [];
this._isPending = true;
this._isCanceled = false;
this._rejectOnCancel = true;
2020-06-11 09:37:37 +02:00
this._promise = new Promise((resolve, reject) => {
this._reject = reject;
2020-06-11 09:37:37 +02:00
const onResolve = value => {
this._isPending = false;
resolve(value);
};
2020-06-11 09:37:37 +02:00
const onReject = error => {
this._isPending = false;
reject(error);
};
2020-06-11 09:37:37 +02:00
const onCancel = handler => {
if (!this._isPending) {
throw new Error('The `onCancel` handler was attached after the promise settled.');
}
this._cancelHandlers.push(handler);
};
Object.defineProperties(onCancel, {
shouldReject: {
get: () => this._rejectOnCancel,
set: boolean => {
this._rejectOnCancel = boolean;
}
}
});
return executor(onResolve, onReject, onCancel);
});
}
then(onFulfilled, onRejected) {
// eslint-disable-next-line promise/prefer-await-to-then
return this._promise.then(onFulfilled, onRejected);
}
catch(onRejected) {
return this._promise.catch(onRejected);
}
finally(onFinally) {
return this._promise.finally(onFinally);
}
cancel(reason) {
if (!this._isPending || this._isCanceled) {
return;
}
if (this._cancelHandlers.length > 0) {
try {
for (const handler of this._cancelHandlers) {
handler();
}
} catch (error) {
this._reject(error);
}
}
this._isCanceled = true;
if (this._rejectOnCancel) {
this._reject(new CancelError(reason));
}
}
get isCanceled() {
return this._isCanceled;
}
}
2020-06-11 09:37:37 +02:00
Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
module.exports = PCancelable;
module.exports.CancelError = CancelError;
/***/ }),
/***/ 558:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = hasPreviousPage
const deprecate = __webpack_require__(370)
const getPageLinks = __webpack_require__(577)
function hasPreviousPage (link) {
deprecate(`octokit.hasPreviousPage() You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
return getPageLinks(link).prev
}
/***/ }),
/***/ 563:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = getPreviousPage
const getPage = __webpack_require__(265)
function getPreviousPage (octokit, link, headers) {
return getPage(octokit, link, 'prev', headers)
}
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 565:
/***/ (function(module) {
module.exports = require("http2");
/***/ }),
/***/ 568:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const path = __webpack_require__(622);
const niceTry = __webpack_require__(948);
const resolveCommand = __webpack_require__(489);
const escape = __webpack_require__(462);
const readShebang = __webpack_require__(389);
const semver = __webpack_require__(280);
const isWin = process.platform === 'win32';
const isExecutableRegExp = /\.(?:com|exe)$/i;
const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0
const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false;
function detectShebang(parsed) {
parsed.file = resolveCommand(parsed);
const shebang = parsed.file && readShebang(parsed.file);
if (shebang) {
parsed.args.unshift(parsed.file);
parsed.command = shebang;
return resolveCommand(parsed);
}
return parsed.file;
}
function parseNonShell(parsed) {
if (!isWin) {
return parsed;
}
// Detect & add support for shebangs
const commandFile = detectShebang(parsed);
// We don't need a shell if the command filename is an executable
const needsShell = !isExecutableRegExp.test(commandFile);
// If a shell is required, use cmd.exe and take care of escaping everything correctly
// Note that `forceShell` is an hidden option used only in tests
if (parsed.options.forceShell || needsShell) {
// Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`
// The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument
// Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,
// we need to double escape them
const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
// Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar)
// This is necessary otherwise it will always fail with ENOENT in those cases
parsed.command = path.normalize(parsed.command);
// Escape command & arguments
parsed.command = escape.command(parsed.command);
parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
const shellCommand = [parsed.command].concat(parsed.args).join(' ');
parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
parsed.command = process.env.comspec || 'cmd.exe';
parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
}
return parsed;
}
function parseShell(parsed) {
// If node supports the shell option, there's no need to mimic its behavior
if (supportsShellOption) {
return parsed;
}
// Mimic node shell option
// See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
const shellCommand = [parsed.command].concat(parsed.args).join(' ');
if (isWin) {
parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`];
parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
} else {
if (typeof parsed.options.shell === 'string') {
parsed.command = parsed.options.shell;
} else if (process.platform === 'android') {
parsed.command = '/system/bin/sh';
} else {
parsed.command = '/bin/sh';
}
2020-06-11 09:37:37 +02:00
parsed.args = ['-c', shellCommand];
}
return parsed;
}
function parse(command, args, options) {
// Normalize arguments, similar to nodejs
if (args && !Array.isArray(args)) {
options = args;
args = null;
}
args = args ? args.slice(0) : []; // Clone array to avoid changing the original
options = Object.assign({}, options); // Clone object to avoid changing the original
// Build our parsed object
const parsed = {
command,
args,
options,
file: undefined,
original: {
command,
args,
},
};
// Delegate further parsing to shell or non-shell
return options.shell ? parseShell(parsed) : parseNonShell(parsed);
}
module.exports = parse;
/***/ }),
/***/ 570:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const {
V4MAPPED,
ADDRCONFIG,
ALL,
promises: {
Resolver: AsyncResolver
},
lookup: dnsLookup
} = __webpack_require__(819);
const {promisify} = __webpack_require__(669);
const os = __webpack_require__(87);
const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
const kExpires = Symbol('expires');
const supportsALL = typeof ALL === 'number';
const verifyAgent = agent => {
if (!(agent && typeof agent.createConnection === 'function')) {
throw new Error('Expected an Agent instance as the first argument');
}
};
const map4to6 = entries => {
for (const entry of entries) {
if (entry.family === 6) {
continue;
}
entry.address = `::ffff:${entry.address}`;
entry.family = 6;
}
};
const getIfaceInfo = () => {
let has4 = false;
let has6 = false;
for (const device of Object.values(os.networkInterfaces())) {
for (const iface of device) {
if (iface.internal) {
continue;
}
if (iface.family === 'IPv6') {
has6 = true;
} else {
has4 = true;
}
if (has4 && has6) {
return {has4, has6};
}
}
}
return {has4, has6};
};
const isIterable = map => {
return Symbol.iterator in map;
};
const ttl = {ttl: true};
const all = {all: true};
class CacheableLookup {
constructor({
cache = new Map(),
maxTtl = Infinity,
fallbackDuration = 3600,
errorTtl = 0.15,
resolver = new AsyncResolver(),
lookup = dnsLookup
} = {}) {
this.maxTtl = maxTtl;
this.errorTtl = errorTtl;
this._cache = cache;
this._resolver = resolver;
this._dnsLookup = promisify(lookup);
if (this._resolver instanceof AsyncResolver) {
this._resolve4 = this._resolver.resolve4.bind(this._resolver);
this._resolve6 = this._resolver.resolve6.bind(this._resolver);
} else {
this._resolve4 = promisify(this._resolver.resolve4.bind(this._resolver));
this._resolve6 = promisify(this._resolver.resolve6.bind(this._resolver));
}
this._iface = getIfaceInfo();
this._pending = {};
this._nextRemovalTime = false;
this._hostnamesToFallback = new Set();
if (fallbackDuration < 1) {
this._fallback = false;
} else {
this._fallback = true;
const interval = setInterval(() => {
this._hostnamesToFallback.clear();
}, fallbackDuration * 1000);
/* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */
if (interval.unref) {
interval.unref();
}
}
this.lookup = this.lookup.bind(this);
this.lookupAsync = this.lookupAsync.bind(this);
}
set servers(servers) {
this.clear();
this._resolver.setServers(servers);
}
get servers() {
return this._resolver.getServers();
}
lookup(hostname, options, callback) {
if (typeof options === 'function') {
callback = options;
options = {};
} else if (typeof options === 'number') {
options = {
family: options
};
}
if (!callback) {
throw new Error('Callback must be a function.');
}
// eslint-disable-next-line promise/prefer-await-to-then
this.lookupAsync(hostname, options).then(result => {
if (options.all) {
callback(null, result);
} else {
callback(null, result.address, result.family, result.expires, result.ttl);
}
}, callback);
}
async lookupAsync(hostname, options = {}) {
if (typeof options === 'number') {
options = {
family: options
};
}
let cached = await this.query(hostname);
if (options.family === 6) {
const filtered = cached.filter(entry => entry.family === 6);
if (options.hints & V4MAPPED) {
if ((supportsALL && options.hints & ALL) || filtered.length === 0) {
map4to6(cached);
} else {
cached = filtered;
}
} else {
cached = filtered;
}
} else if (options.family === 4) {
cached = cached.filter(entry => entry.family === 4);
}
if (options.hints & ADDRCONFIG) {
const {_iface} = this;
cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);
}
if (cached.length === 0) {
const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);
error.code = 'ENOTFOUND';
error.hostname = hostname;
throw error;
}
if (options.all) {
return cached;
}
return cached[0];
}
async query(hostname) {
let cached = await this._cache.get(hostname);
if (!cached) {
const pending = this._pending[hostname];
if (pending) {
cached = await pending;
} else {
const newPromise = this.queryAndCache(hostname);
this._pending[hostname] = newPromise;
cached = await newPromise;
}
}
cached = cached.map(entry => {
return {...entry};
});
return cached;
}
async _resolve(hostname) {
const wrap = async promise => {
try {
return await promise;
} catch (error) {
if (error.code === 'ENODATA' || error.code === 'ENOTFOUND') {
return [];
}
throw error;
}
};
// ANY is unsafe as it doesn't trigger new queries in the underlying server.
const [A, AAAA] = await Promise.all([
this._resolve4(hostname, ttl),
this._resolve6(hostname, ttl)
].map(promise => wrap(promise)));
let aTtl = 0;
let aaaaTtl = 0;
let cacheTtl = 0;
const now = Date.now();
for (const entry of A) {
entry.family = 4;
entry.expires = now + (entry.ttl * 1000);
aTtl = Math.max(aTtl, entry.ttl);
}
for (const entry of AAAA) {
entry.family = 6;
entry.expires = now + (entry.ttl * 1000);
aaaaTtl = Math.max(aaaaTtl, entry.ttl);
}
if (A.length > 0) {
if (AAAA.length > 0) {
cacheTtl = Math.min(aTtl, aaaaTtl);
} else {
cacheTtl = aTtl;
}
} else {
cacheTtl = aaaaTtl;
}
return {
entries: [
...A,
...AAAA
],
cacheTtl
};
}
async _lookup(hostname) {
try {
const entries = await this._dnsLookup(hostname, {
all: true
});
return {
entries,
cacheTtl: 0
};
} catch (_) {
return {
entries: [],
cacheTtl: 0
};
}
}
async _set(hostname, data, cacheTtl) {
if (this.maxTtl > 0 && cacheTtl > 0) {
cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;
data[kExpires] = Date.now() + cacheTtl;
try {
await this._cache.set(hostname, data, cacheTtl);
} catch (error) {
this.lookupAsync = async () => {
const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');
cacheError.cause = error;
throw cacheError;
};
}
if (isIterable(this._cache)) {
this._tick(cacheTtl);
}
}
}
async queryAndCache(hostname) {
if (this._hostnamesToFallback.has(hostname)) {
return this._dnsLookup(hostname, all);
}
try {
let query = await this._resolve(hostname);
if (query.entries.length === 0 && this._fallback) {
query = await this._lookup(hostname);
if (query.entries.length !== 0) {
// Use `dns.lookup(...)` for that particular hostname
this._hostnamesToFallback.add(hostname);
}
}
const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;
await this._set(hostname, query.entries, cacheTtl);
delete this._pending[hostname];
return query.entries;
} catch (error) {
delete this._pending[hostname];
throw error;
}
}
_tick(ms) {
const nextRemovalTime = this._nextRemovalTime;
if (!nextRemovalTime || ms < nextRemovalTime) {
clearTimeout(this._removalTimeout);
this._nextRemovalTime = ms;
this._removalTimeout = setTimeout(() => {
this._nextRemovalTime = false;
let nextExpiry = Infinity;
const now = Date.now();
for (const [hostname, entries] of this._cache) {
const expires = entries[kExpires];
if (now >= expires) {
this._cache.delete(hostname);
} else if (expires < nextExpiry) {
nextExpiry = expires;
}
}
if (nextExpiry !== Infinity) {
this._tick(nextExpiry - now);
}
}, ms);
/* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */
if (this._removalTimeout.unref) {
this._removalTimeout.unref();
}
}
}
install(agent) {
verifyAgent(agent);
if (kCacheableLookupCreateConnection in agent) {
throw new Error('CacheableLookup has been already installed');
}
agent[kCacheableLookupCreateConnection] = agent.createConnection;
agent[kCacheableLookupInstance] = this;
2020-06-11 09:37:37 +02:00
agent.createConnection = (options, callback) => {
if (!('lookup' in options)) {
options.lookup = this.lookup;
}
2020-06-11 09:37:37 +02:00
return agent[kCacheableLookupCreateConnection](options, callback);
};
}
2020-06-11 09:37:37 +02:00
uninstall(agent) {
verifyAgent(agent);
2020-06-11 09:37:37 +02:00
if (agent[kCacheableLookupCreateConnection]) {
if (agent[kCacheableLookupInstance] !== this) {
throw new Error('The agent is not owned by this CacheableLookup instance');
}
2020-06-11 09:37:37 +02:00
agent.createConnection = agent[kCacheableLookupCreateConnection];
delete agent[kCacheableLookupCreateConnection];
delete agent[kCacheableLookupInstance];
}
}
updateInterfaceInfo() {
const {_iface} = this;
this._iface = getIfaceInfo();
if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {
this._cache.clear();
}
}
clear(hostname) {
if (hostname) {
this._cache.delete(hostname);
return;
}
this._cache.clear();
}
}
2020-06-11 09:37:37 +02:00
module.exports = CacheableLookup;
module.exports.default = CacheableLookup;
/***/ }),
/***/ 577:
/***/ (function(module) {
module.exports = getPageLinks
function getPageLinks (link) {
link = link.link || link.headers.link || ''
const links = {}
// link format:
// '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
link.replace(/<([^>]*)>;\s*rel="([\w]*)"/g, (m, uri, type) => {
links[type] = uri
})
return links
}
/***/ }),
/***/ 605:
/***/ (function(module) {
module.exports = require("http");
/***/ }),
/***/ 614:
/***/ (function(module) {
module.exports = require("events");
/***/ }),
/***/ 619:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var osName = _interopDefault(__webpack_require__(2));
function getUserAgent() {
try {
return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
} catch (error) {
if (/wmic os get Caption/.test(error.message)) {
return "Windows <version undetectable>";
}
throw error;
}
}
exports.getUserAgent = getUserAgent;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 621:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const path = __webpack_require__(622);
const pathKey = __webpack_require__(39);
module.exports = opts => {
opts = Object.assign({
cwd: process.cwd(),
path: process.env[pathKey()]
}, opts);
let prev;
let pth = path.resolve(opts.cwd);
const ret = [];
while (prev !== pth) {
ret.push(path.join(pth, 'node_modules/.bin'));
prev = pth;
pth = path.resolve(pth, '..');
}
// ensure the running `node` binary is used
ret.push(path.dirname(process.execPath));
return ret.concat(opts.path).join(path.delimiter);
};
module.exports.env = opts => {
opts = Object.assign({
env: process.env
}, opts);
const env = Object.assign({}, opts.env);
const path = pathKey({env});
opts.path = env[path];
env[path] = module.exports(opts);
return env;
};
/***/ }),
/***/ 622:
/***/ (function(module) {
module.exports = require("path");
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 625:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const {PassThrough} = __webpack_require__(413);
module.exports = options => {
options = Object.assign({}, options);
const {array} = options;
let {encoding} = options;
const buffer = encoding === 'buffer';
let objectMode = false;
if (array) {
objectMode = !(encoding || buffer);
} else {
encoding = encoding || 'utf8';
}
if (buffer) {
encoding = null;
}
let len = 0;
const ret = [];
const stream = new PassThrough({objectMode});
if (encoding) {
stream.setEncoding(encoding);
}
stream.on('data', chunk => {
ret.push(chunk);
if (objectMode) {
len = ret.length;
} else {
len += chunk.length;
}
});
stream.getBufferedValue = () => {
if (array) {
return ret;
}
return buffer ? Buffer.concat(ret, len) : ret.join('');
};
stream.getBufferedLength = () => len;
return stream;
};
/***/ }),
/***/ 628:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function default_1(from, to, events) {
const fns = {};
for (const event of events) {
fns[event] = (...args) => {
to.emit(event, ...args);
};
from.on(event, fns[event]);
}
return () => {
for (const event of events) {
from.off(event, fns[event]);
}
};
}
exports.default = default_1;
/***/ }),
/***/ 631:
/***/ (function(module) {
module.exports = require("net");
/***/ }),
/***/ 649:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = getLastPage
const getPage = __webpack_require__(265)
function getLastPage (octokit, link, headers) {
return getPage(octokit, link, 'last', headers)
}
/***/ }),
/***/ 654:
/***/ (function(module) {
// This is not the set of all possible signals.
//
// It IS, however, the set of all signals that trigger
// an exit on either Linux or BSD systems. Linux is a
// superset of the signal names supported on BSD, and
// the unknown signals just fail to register, so we can
// catch that easily enough.
//
// Don't bother with SIGKILL. It's uncatchable, which
// means that we can't fire any callbacks anyway.
//
// If a user does happen to register a handler on a non-
// fatal signal like SIGWINCH or something, and then
// exit, it'll end up firing `process.emit('exit')`, so
// the handler will be fired anyway.
//
// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
// artificially, inherently leave the process in a
// state from which it is not safe to try and enter JS
// listeners.
module.exports = [
'SIGABRT',
'SIGALRM',
'SIGHUP',
'SIGINT',
'SIGTERM'
]
if (process.platform !== 'win32') {
module.exports.push(
'SIGVTALRM',
'SIGXCPU',
'SIGXFSZ',
'SIGUSR2',
'SIGTRAP',
'SIGSYS',
'SIGQUIT',
'SIGIOT'
// should detect profiler and enable/disable accordingly.
// see #21
// 'SIGPROF'
)
}
if (process.platform === 'linux') {
module.exports.push(
'SIGIO',
'SIGPOLL',
'SIGPWR',
'SIGSTKFLT',
'SIGUNUSED'
)
}
/***/ }),
/***/ 669:
/***/ (function(module) {
module.exports = require("util");
/***/ }),
/***/ 674:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = authenticate;
const { Deprecation } = __webpack_require__(692);
const once = __webpack_require__(969);
const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation));
function authenticate(state, options) {
deprecateAuthenticate(
state.octokit.log,
new Deprecation(
'[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.'
)
);
if (!options) {
state.auth = false;
return;
}
switch (options.type) {
case "basic":
if (!options.username || !options.password) {
throw new Error(
"Basic authentication requires both a username and password to be set"
);
}
break;
case "oauth":
if (!options.token && !(options.key && options.secret)) {
throw new Error(
"OAuth2 authentication requires a token or key & secret to be set"
);
}
break;
case "token":
case "app":
if (!options.token) {
throw new Error("Token authentication requires a token to be set");
}
break;
default:
throw new Error(
"Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'"
);
}
state.auth = options;
}
/***/ }),
/***/ 675:
/***/ (function(module) {
module.exports = function btoa(str) {
return new Buffer(str).toString('base64')
}
/***/ }),
/***/ 692:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
class Deprecation extends Error {
constructor(message) {
super(message); // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
this.name = 'Deprecation';
}
}
exports.Deprecation = Deprecation;
/***/ }),
/***/ 696:
/***/ (function(module) {
"use strict";
/*!
* isobject <https://github.com/jonschlinkert/isobject>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObject(val) {
return val != null && typeof val === 'object' && Array.isArray(val) === false;
}
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObjectObject(o) {
return isObject(o) === true
&& Object.prototype.toString.call(o) === '[object Object]';
}
function isPlainObject(o) {
var ctor,prot;
if (isObjectObject(o) === false) return false;
// If has modified constructor
ctor = o.constructor;
if (typeof ctor !== 'function') return false;
// If has modified prototype
prot = ctor.prototype;
if (isObjectObject(prot) === false) return false;
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false;
}
// Most likely a plain Object
return true;
}
module.exports = isPlainObject;
/***/ }),
/***/ 697:
/***/ (function(module) {
"use strict";
module.exports = (promise, onFinally) => {
onFinally = onFinally || (() => {});
return promise.then(
val => new Promise(resolve => {
resolve(onFinally());
}).then(() => val),
err => new Promise(resolve => {
resolve(onFinally());
}).then(() => {
throw err;
})
);
};
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 699:
/***/ (function(module) {
"use strict";
/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */
const makeError = (Base, key, getMessage) => {
module.exports[key] = class NodeError extends Base {
constructor(...args) {
super(typeof getMessage === 'string' ? getMessage : getMessage(args));
this.name = `${super.name} [${key}]`;
this.code = key;
}
};
};
makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {
const type = args[0].includes('.') ? 'property' : 'argument';
let valid = args[1];
const isManyTypes = Array.isArray(valid);
if (isManyTypes) {
valid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`;
}
return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;
});
makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => {
return `Protocol "${args[0]}" not supported. Expected "${args[1]}"`;
});
makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => {
return `Cannot ${args[0]} headers after they are sent to the client`;
});
makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => {
return `${args[0]} must be a valid HTTP token [${args[1]}]`;
});
makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => {
return `Invalid value "${args[0]} for header "${args[1]}"`;
});
makeError(TypeError, 'ERR_INVALID_CHAR', args => {
return `Invalid character in ${args[0]} [${args[1]}]`;
});
/***/ }),
/***/ 723:
/***/ (function(module) {
"use strict";
module.exports = header => {
switch (header) {
case ':method':
case ':scheme':
case ':authority':
case ':path':
return true;
default:
return false;
}
};
/***/ }),
/***/ 738:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const conversionTable = {
auto: 0,
ipv4: 4,
ipv6: 6
};
exports.isDnsLookupIpVersion = (value) => {
return value in conversionTable;
};
exports.dnsLookupIpVersionToFamily = (dnsLookupIpVersion) => {
if (exports.isDnsLookupIpVersion(dnsLookupIpVersion)) {
return conversionTable[dnsLookupIpVersion];
}
throw new Error('Invalid DNS lookup IP version');
};
/***/ }),
/***/ 742:
/***/ (function(module, __unusedexports, __webpack_require__) {
var fs = __webpack_require__(747)
var core
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
core = __webpack_require__(818)
} else {
core = __webpack_require__(197)
}
module.exports = isexe
isexe.sync = sync
function isexe (path, options, cb) {
if (typeof options === 'function') {
cb = options
options = {}
}
if (!cb) {
if (typeof Promise !== 'function') {
throw new TypeError('callback not provided')
}
return new Promise(function (resolve, reject) {
isexe(path, options || {}, function (er, is) {
if (er) {
reject(er)
} else {
resolve(is)
}
})
})
}
core(path, options || {}, function (er, is) {
// ignore EACCES because that just means we aren't allowed to run it
if (er) {
if (er.code === 'EACCES' || options && options.ignoreErrors) {
er = null
is = false
}
}
cb(er, is)
})
}
function sync (path, options) {
// my kingdom for a filtered catch
try {
return core.sync(path, options || {})
} catch (er) {
if (options && options.ignoreErrors || er.code === 'EACCES') {
return false
} else {
throw er
}
}
}
/***/ }),
/***/ 747:
/***/ (function(module) {
module.exports = require("fs");
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 750:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const {Readable} = __webpack_require__(413);
class IncomingMessage extends Readable {
constructor(socket, highWaterMark) {
super({
highWaterMark,
autoDestroy: false
});
this.statusCode = null;
this.statusMessage = '';
this.httpVersion = '2.0';
this.httpVersionMajor = 2;
this.httpVersionMinor = 0;
this.headers = {};
this.trailers = {};
this.req = null;
this.aborted = false;
this.complete = false;
this.upgrade = null;
this.rawHeaders = [];
this.rawTrailers = [];
this.socket = socket;
this.connection = socket;
this._dumped = false;
}
_destroy(error) {
this.req._request.destroy(error);
}
setTimeout(ms, callback) {
this.req.setTimeout(ms, callback);
return this;
}
_dump() {
if (!this._dumped) {
this._dumped = true;
this.removeAllListeners('data');
this.resume();
}
}
_read() {
if (this.req) {
this.req._request.resume();
}
}
}
module.exports = IncomingMessage;
/***/ }),
/***/ 751:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const net = __webpack_require__(631);
/* istanbul ignore file: https://github.com/nodejs/node/blob/v13.0.1/lib/_http_agent.js */
module.exports = options => {
let servername = options.host;
const hostHeader = options.headers && options.headers.host;
if (hostHeader) {
if (hostHeader.startsWith('[')) {
const index = hostHeader.indexOf(']');
if (index === -1) {
servername = hostHeader;
} else {
servername = hostHeader.slice(1, -1);
}
} else {
servername = hostHeader.split(':', 1)[0];
}
}
if (net.isIP(servername)) {
return '';
}
return servername;
};
/***/ }),
/***/ 753:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var endpoint = __webpack_require__(385);
var universalUserAgent = __webpack_require__(796);
var isPlainObject = _interopDefault(__webpack_require__(696));
var nodeFetch = _interopDefault(__webpack_require__(454));
var requestError = __webpack_require__(257);
const VERSION = "5.4.5";
function getBufferResponse(response) {
return response.arrayBuffer();
}
function fetchWrapper(requestOptions) {
if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
requestOptions.body = JSON.stringify(requestOptions.body);
}
let headers = {};
let status;
let url;
const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
return fetch(requestOptions.url, Object.assign({
method: requestOptions.method,
body: requestOptions.body,
headers: requestOptions.headers,
redirect: requestOptions.redirect
}, requestOptions.request)).then(response => {
url = response.url;
status = response.status;
for (const keyAndValue of response.headers) {
headers[keyAndValue[0]] = keyAndValue[1];
}
if (status === 204 || status === 205) {
return;
} // GitHub API returns 200 for HEAD requests
if (requestOptions.method === "HEAD") {
if (status < 400) {
return;
}
throw new requestError.RequestError(response.statusText, status, {
headers,
request: requestOptions
});
}
if (status === 304) {
throw new requestError.RequestError("Not modified", status, {
headers,
request: requestOptions
});
}
if (status >= 400) {
return response.text().then(message => {
const error = new requestError.RequestError(message, status, {
headers,
request: requestOptions
});
try {
let responseBody = JSON.parse(error.message);
Object.assign(error, responseBody);
let errors = responseBody.errors; // Assumption `errors` would always be in Array format
error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
} catch (e) {// ignore, see octokit/rest.js#684
}
throw error;
});
}
const contentType = response.headers.get("content-type");
if (/application\/json/.test(contentType)) {
return response.json();
}
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
return response.text();
}
return getBufferResponse(response);
}).then(data => {
return {
status,
url,
headers,
data
};
}).catch(error => {
if (error instanceof requestError.RequestError) {
throw error;
}
throw new requestError.RequestError(error.message, 500, {
headers,
request: requestOptions
});
});
}
function withDefaults(oldEndpoint, newDefaults) {
const endpoint = oldEndpoint.defaults(newDefaults);
const newApi = function (route, parameters) {
const endpointOptions = endpoint.merge(route, parameters);
if (!endpointOptions.request || !endpointOptions.request.hook) {
return fetchWrapper(endpoint.parse(endpointOptions));
}
const request = (route, parameters) => {
return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
};
Object.assign(request, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
return endpointOptions.request.hook(request, endpointOptions);
};
return Object.assign(newApi, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
}
const request = withDefaults(endpoint.endpoint, {
headers: {
"user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
}
});
exports.request = request;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 761:
/***/ (function(module) {
module.exports = require("zlib");
/***/ }),
/***/ 763:
/***/ (function(module) {
module.exports = removeHook
function removeHook (state, name, method) {
if (!state.registry[name]) {
return
}
var index = state.registry[name]
.map(function (registered) { return registered.orig })
.indexOf(method)
if (index === -1) {
return
}
state.registry[name].splice(index, 1)
}
/***/ }),
/***/ 768:
/***/ (function(module) {
"use strict";
module.exports = function (x) {
var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();
if (x[x.length - 1] === lf) {
x = x.slice(0, x.length - 1);
}
if (x[x.length - 1] === cr) {
x = x.slice(0, x.length - 1);
}
return x;
};
/***/ }),
/***/ 777:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = getFirstPage
const getPage = __webpack_require__(265)
function getFirstPage (octokit, link, headers) {
return getPage(octokit, link, 'first', headers)
}
/***/ }),
/***/ 784:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// When attaching listeners, it's very easy to forget about them.
// Especially if you do error handling and set timeouts.
// So instead of checking if it's proper to throw an error on every timeout ever,
// use this simple tool which will remove all listeners you have attached.
exports.default = () => {
const handlers = [];
return {
once(origin, event, fn) {
origin.once(event, fn);
handlers.push({ origin, event, fn });
},
unhandleAll() {
for (const handler of handlers) {
const { origin, event, fn } = handler;
origin.removeListener(event, fn);
}
handlers.length = 0;
}
};
};
/***/ }),
/***/ 786:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __webpack_require__(747);
const util_1 = __webpack_require__(669);
const is_1 = __webpack_require__(534);
const is_form_data_1 = __webpack_require__(460);
const statAsync = util_1.promisify(fs_1.stat);
exports.default = async (body, headers) => {
if (headers && 'content-length' in headers) {
return Number(headers['content-length']);
}
if (!body) {
return 0;
}
if (is_1.default.string(body)) {
return Buffer.byteLength(body);
}
if (is_1.default.buffer(body)) {
return body.length;
}
if (is_form_data_1.default(body)) {
return util_1.promisify(body.getLength.bind(body))();
}
if (body instanceof fs_1.ReadStream) {
const { size } = await statAsync(body.path);
return size;
}
return undefined;
};
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 790:
/***/ (function(module, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tls_1 = __webpack_require__(16);
const deferToConnect = (socket, fn) => {
let listeners;
if (typeof fn === 'function') {
const connect = fn;
listeners = { connect };
}
else {
listeners = fn;
}
const hasConnectListener = typeof listeners.connect === 'function';
const hasSecureConnectListener = typeof listeners.secureConnect === 'function';
const hasCloseListener = typeof listeners.close === 'function';
const onConnect = () => {
if (hasConnectListener) {
listeners.connect();
}
if (socket instanceof tls_1.TLSSocket && hasSecureConnectListener) {
if (socket.authorized) {
listeners.secureConnect();
}
else if (!socket.authorizationError) {
socket.once('secureConnect', listeners.secureConnect);
}
}
if (hasCloseListener) {
socket.once('close', listeners.close);
}
};
if (socket.writable && !socket.connecting) {
onConnect();
}
else if (socket.connecting) {
socket.once('connect', onConnect);
}
else if (socket.destroyed && hasCloseListener) {
listeners.close(socket._hadError);
}
};
exports.default = deferToConnect;
// For CommonJS default export support
module.exports = deferToConnect;
module.exports.default = deferToConnect;
/***/ }),
/***/ 796:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var osName = _interopDefault(__webpack_require__(2));
function getUserAgent() {
try {
return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
} catch (error) {
if (/wmic os get Caption/.test(error.message)) {
return "Windows <version undetectable>";
}
return "<environment undetectable>";
}
}
exports.getUserAgent = getUserAgent;
//# sourceMappingURL=index.js.map
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 811:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const net = __webpack_require__(631);
const unhandle_1 = __webpack_require__(784);
const reentry = Symbol('reentry');
const noop = () => { };
class TimeoutError extends Error {
constructor(threshold, event) {
super(`Timeout awaiting '${event}' for ${threshold}ms`);
this.event = event;
this.name = 'TimeoutError';
this.code = 'ETIMEDOUT';
}
}
exports.TimeoutError = TimeoutError;
exports.default = (request, delays, options) => {
if (reentry in request) {
return noop;
}
request[reentry] = true;
const cancelers = [];
const { once, unhandleAll } = unhandle_1.default();
const addTimeout = (delay, callback, event) => {
var _a;
const timeout = setTimeout(callback, delay, delay, event);
(_a = timeout.unref) === null || _a === void 0 ? void 0 : _a.call(timeout);
const cancel = () => {
clearTimeout(timeout);
};
cancelers.push(cancel);
return cancel;
};
const { host, hostname } = options;
const timeoutHandler = (delay, event) => {
request.destroy(new TimeoutError(delay, event));
};
const cancelTimeouts = () => {
for (const cancel of cancelers) {
cancel();
}
unhandleAll();
};
request.once('error', error => {
cancelTimeouts();
// Save original behavior
/* istanbul ignore next */
if (request.listenerCount('error') === 0) {
throw error;
}
});
request.once('close', cancelTimeouts);
once(request, 'response', (response) => {
once(response, 'end', cancelTimeouts);
});
if (typeof delays.request !== 'undefined') {
addTimeout(delays.request, timeoutHandler, 'request');
}
if (typeof delays.socket !== 'undefined') {
const socketTimeoutHandler = () => {
timeoutHandler(delays.socket, 'socket');
};
request.setTimeout(delays.socket, socketTimeoutHandler);
// `request.setTimeout(0)` causes a memory leak.
// We can just remove the listener and forget about the timer - it's unreffed.
// See https://github.com/sindresorhus/got/issues/690
cancelers.push(() => {
request.removeListener('timeout', socketTimeoutHandler);
});
}
once(request, 'socket', (socket) => {
var _a;
const { socketPath } = request;
/* istanbul ignore next: hard to test */
if (socket.connecting) {
const hasPath = Boolean(socketPath !== null && socketPath !== void 0 ? socketPath : net.isIP((_a = hostname !== null && hostname !== void 0 ? hostname : host) !== null && _a !== void 0 ? _a : '') !== 0);
if (typeof delays.lookup !== 'undefined' && !hasPath && typeof socket.address().address === 'undefined') {
const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
once(socket, 'lookup', cancelTimeout);
}
if (typeof delays.connect !== 'undefined') {
const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
if (hasPath) {
once(socket, 'connect', timeConnect());
}
else {
once(socket, 'lookup', (error) => {
if (error === null) {
once(socket, 'connect', timeConnect());
}
});
}
}
if (typeof delays.secureConnect !== 'undefined' && options.protocol === 'https:') {
once(socket, 'connect', () => {
const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
once(socket, 'secureConnect', cancelTimeout);
});
}
}
if (typeof delays.send !== 'undefined') {
const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
/* istanbul ignore next: hard to test */
if (socket.connecting) {
once(socket, 'connect', () => {
once(request, 'upload-complete', timeRequest());
});
}
else {
once(request, 'upload-complete', timeRequest());
}
}
});
if (typeof delays.response !== 'undefined') {
once(request, 'upload-complete', () => {
const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
once(request, 'response', cancelTimeout);
});
}
return cancelTimeouts;
};
/***/ }),
/***/ 813:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
async function auth(token) {
const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
return {
type: "token",
token: token,
tokenType
};
}
/**
* Prefix token for usage in the Authorization header
*
* @param token OAuth token or JSON Web Token
*/
function withAuthorizationPrefix(token) {
if (token.split(/\./).length === 3) {
return `bearer ${token}`;
}
return `token ${token}`;
}
async function hook(token, request, route, parameters) {
const endpoint = request.endpoint.merge(route, parameters);
endpoint.headers.authorization = withAuthorizationPrefix(token);
return request(endpoint);
}
const createTokenAuth = function createTokenAuth(token) {
if (!token) {
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
}
if (typeof token !== "string") {
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
}
token = token.replace(/^(token|bearer) +/i, "");
return Object.assign(auth.bind(null, token), {
hook: hook.bind(null, token)
});
};
exports.createTokenAuth = createTokenAuth;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 814:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = which
which.sync = whichSync
var isWindows = process.platform === 'win32' ||
process.env.OSTYPE === 'cygwin' ||
process.env.OSTYPE === 'msys'
var path = __webpack_require__(622)
var COLON = isWindows ? ';' : ':'
var isexe = __webpack_require__(742)
function getNotFoundError (cmd) {
var er = new Error('not found: ' + cmd)
er.code = 'ENOENT'
return er
}
function getPathInfo (cmd, opt) {
var colon = opt.colon || COLON
var pathEnv = opt.path || process.env.PATH || ''
var pathExt = ['']
pathEnv = pathEnv.split(colon)
var pathExtExe = ''
if (isWindows) {
pathEnv.unshift(process.cwd())
pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
pathExt = pathExtExe.split(colon)
// Always test the cmd itself first. isexe will check to make sure
// it's found in the pathExt set.
if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
pathExt.unshift('')
}
// If it has a slash, then we don't bother searching the pathenv.
// just check the file itself, and that's it.
if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
pathEnv = ['']
return {
env: pathEnv,
ext: pathExt,
extExe: pathExtExe
}
}
function which (cmd, opt, cb) {
if (typeof opt === 'function') {
cb = opt
opt = {}
}
var info = getPathInfo(cmd, opt)
var pathEnv = info.env
var pathExt = info.ext
var pathExtExe = info.extExe
var found = []
;(function F (i, l) {
if (i === l) {
if (opt.all && found.length)
return cb(null, found)
else
return cb(getNotFoundError(cmd))
}
var pathPart = pathEnv[i]
if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
pathPart = pathPart.slice(1, -1)
var p = path.join(pathPart, cmd)
if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
p = cmd.slice(0, 2) + p
}
;(function E (ii, ll) {
if (ii === ll) return F(i + 1, l)
var ext = pathExt[ii]
isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
if (!er && is) {
if (opt.all)
found.push(p + ext)
else
return cb(null, p + ext)
}
return E(ii + 1, ll)
})
})(0, pathExt.length)
})(0, pathEnv.length)
}
function whichSync (cmd, opt) {
opt = opt || {}
var info = getPathInfo(cmd, opt)
var pathEnv = info.env
var pathExt = info.ext
var pathExtExe = info.extExe
var found = []
for (var i = 0, l = pathEnv.length; i < l; i ++) {
var pathPart = pathEnv[i]
if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
pathPart = pathPart.slice(1, -1)
var p = path.join(pathPart, cmd)
if (!pathPart && /^\.[\\\/]/.test(cmd)) {
p = cmd.slice(0, 2) + p
}
for (var j = 0, ll = pathExt.length; j < ll; j ++) {
var cur = p + pathExt[j]
var is
try {
is = isexe.sync(cur, { pathExt: pathExtExe })
if (is) {
if (opt.all)
found.push(cur)
else
return cur
}
} catch (ex) {}
}
}
if (opt.all && found.length)
return found
if (opt.nothrow)
return null
throw getNotFoundError(cmd)
}
/***/ }),
/***/ 816:
/***/ (function(module) {
"use strict";
module.exports = /^#!.*/;
/***/ }),
/***/ 818:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = isexe
isexe.sync = sync
var fs = __webpack_require__(747)
function checkPathExt (path, options) {
var pathext = options.pathExt !== undefined ?
options.pathExt : process.env.PATHEXT
if (!pathext) {
return true
}
pathext = pathext.split(';')
if (pathext.indexOf('') !== -1) {
return true
}
for (var i = 0; i < pathext.length; i++) {
var p = pathext[i].toLowerCase()
if (p && path.substr(-p.length).toLowerCase() === p) {
return true
}
}
return false
}
function checkStat (stat, path, options) {
if (!stat.isSymbolicLink() && !stat.isFile()) {
return false
}
return checkPathExt(path, options)
}
function isexe (path, options, cb) {
fs.stat(path, function (er, stat) {
cb(er, er ? false : checkStat(stat, path, options))
})
}
function sync (path, options) {
return checkStat(fs.statSync(path), path, options)
}
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 819:
/***/ (function(module) {
module.exports = require("dns");
/***/ }),
/***/ 835:
/***/ (function(module) {
module.exports = require("url");
/***/ }),
/***/ 842:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
var deprecation = __webpack_require__(692);
var endpointsByScope = {
actions: {
cancelWorkflowRun: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id/cancel"
},
createOrUpdateSecretForRepo: {
method: "PUT",
params: {
encrypted_value: {
type: "string"
},
key_id: {
type: "string"
},
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/secrets/:name"
},
createRegistrationToken: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/runners/registration-token"
},
createRemoveToken: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/runners/remove-token"
},
deleteArtifact: {
method: "DELETE",
params: {
artifact_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/artifacts/:artifact_id"
},
deleteSecretFromRepo: {
method: "DELETE",
params: {
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/secrets/:name"
},
downloadArtifact: {
method: "GET",
params: {
archive_format: {
required: true,
type: "string"
},
artifact_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format"
},
getArtifact: {
method: "GET",
params: {
artifact_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/artifacts/:artifact_id"
},
getPublicKey: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/secrets/public-key"
},
getSecret: {
method: "GET",
params: {
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/secrets/:name"
},
getSelfHostedRunner: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
runner_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runners/:runner_id"
},
getWorkflow: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
workflow_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/workflows/:workflow_id"
},
getWorkflowJob: {
method: "GET",
params: {
job_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/jobs/:job_id"
},
getWorkflowRun: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id"
},
listDownloadsForSelfHostedRunnerApplication: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/runners/downloads"
},
listJobsForWorkflowRun: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id/jobs"
},
listRepoWorkflowRuns: {
method: "GET",
params: {
actor: {
type: "string"
},
branch: {
type: "string"
},
event: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
status: {
enum: ["completed", "status", "conclusion"],
type: "string"
}
},
url: "/repos/:owner/:repo/actions/runs"
},
listRepoWorkflows: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/workflows"
},
listSecretsForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/secrets"
},
listSelfHostedRunnersForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/runners"
},
listWorkflowJobLogs: {
method: "GET",
params: {
job_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/actions/jobs/:job_id/logs"
},
listWorkflowRunArtifacts: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id/artifacts"
},
listWorkflowRunLogs: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id/logs"
},
listWorkflowRuns: {
method: "GET",
params: {
actor: {
type: "string"
},
branch: {
type: "string"
},
event: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
status: {
enum: ["completed", "status", "conclusion"],
type: "string"
},
workflow_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/workflows/:workflow_id/runs"
},
reRunWorkflow: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
run_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runs/:run_id/rerun"
},
removeSelfHostedRunner: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
runner_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/actions/runners/:runner_id"
}
},
activity: {
checkStarringRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/user/starred/:owner/:repo"
},
deleteRepoSubscription: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/subscription"
},
deleteThreadSubscription: {
method: "DELETE",
params: {
thread_id: {
required: true,
type: "integer"
}
},
url: "/notifications/threads/:thread_id/subscription"
},
getRepoSubscription: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/subscription"
},
getThread: {
method: "GET",
params: {
thread_id: {
required: true,
type: "integer"
}
},
url: "/notifications/threads/:thread_id"
},
getThreadSubscription: {
method: "GET",
params: {
thread_id: {
required: true,
type: "integer"
}
},
url: "/notifications/threads/:thread_id/subscription"
},
listEventsForOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/events/orgs/:org"
},
listEventsForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/events"
},
listFeeds: {
method: "GET",
params: {},
url: "/feeds"
},
listNotifications: {
method: "GET",
params: {
all: {
type: "boolean"
},
before: {
type: "string"
},
page: {
type: "integer"
},
participating: {
type: "boolean"
},
per_page: {
type: "integer"
},
since: {
type: "string"
}
},
url: "/notifications"
},
listNotificationsForRepo: {
method: "GET",
params: {
all: {
type: "boolean"
},
before: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
participating: {
type: "boolean"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
}
},
url: "/repos/:owner/:repo/notifications"
},
listPublicEvents: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/events"
},
listPublicEventsForOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/events"
},
listPublicEventsForRepoNetwork: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/networks/:owner/:repo/events"
},
listPublicEventsForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/events/public"
},
listReceivedEventsForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/received_events"
},
listReceivedPublicEventsForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/received_events/public"
},
listRepoEvents: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/events"
},
listReposStarredByAuthenticatedUser: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/user/starred"
},
listReposStarredByUser: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
sort: {
enum: ["created", "updated"],
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/starred"
},
listReposWatchedByUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/subscriptions"
},
listStargazersForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stargazers"
},
listWatchedReposForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/subscriptions"
},
listWatchersForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/subscribers"
},
markAsRead: {
method: "PUT",
params: {
last_read_at: {
type: "string"
}
},
url: "/notifications"
},
markNotificationsAsReadForRepo: {
method: "PUT",
params: {
last_read_at: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/notifications"
},
markThreadAsRead: {
method: "PATCH",
params: {
thread_id: {
required: true,
type: "integer"
}
},
url: "/notifications/threads/:thread_id"
},
setRepoSubscription: {
method: "PUT",
params: {
ignored: {
type: "boolean"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
subscribed: {
type: "boolean"
}
},
url: "/repos/:owner/:repo/subscription"
},
setThreadSubscription: {
method: "PUT",
params: {
ignored: {
type: "boolean"
},
thread_id: {
required: true,
type: "integer"
}
},
url: "/notifications/threads/:thread_id/subscription"
},
starRepo: {
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/user/starred/:owner/:repo"
},
unstarRepo: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/user/starred/:owner/:repo"
}
},
apps: {
addRepoToInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "PUT",
params: {
installation_id: {
required: true,
type: "integer"
},
repository_id: {
required: true,
type: "integer"
}
},
url: "/user/installations/:installation_id/repositories/:repository_id"
},
checkAccountIsAssociatedWithAny: {
method: "GET",
params: {
account_id: {
required: true,
type: "integer"
}
},
url: "/marketplace_listing/accounts/:account_id"
},
checkAccountIsAssociatedWithAnyStubbed: {
method: "GET",
params: {
account_id: {
required: true,
type: "integer"
}
},
url: "/marketplace_listing/stubbed/accounts/:account_id"
},
checkAuthorization: {
deprecated: "octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization",
method: "GET",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
checkToken: {
headers: {
accept: "application/vnd.github.doctor-strange-preview+json"
},
method: "POST",
params: {
access_token: {
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/token"
},
createContentAttachment: {
headers: {
accept: "application/vnd.github.corsair-preview+json"
},
method: "POST",
params: {
body: {
required: true,
type: "string"
},
content_reference_id: {
required: true,
type: "integer"
},
title: {
required: true,
type: "string"
}
},
url: "/content_references/:content_reference_id/attachments"
},
createFromManifest: {
headers: {
accept: "application/vnd.github.fury-preview+json"
},
method: "POST",
params: {
code: {
required: true,
type: "string"
}
},
url: "/app-manifests/:code/conversions"
},
createInstallationToken: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "POST",
params: {
installation_id: {
required: true,
type: "integer"
},
permissions: {
type: "object"
},
repository_ids: {
type: "integer[]"
}
},
url: "/app/installations/:installation_id/access_tokens"
},
deleteAuthorization: {
headers: {
accept: "application/vnd.github.doctor-strange-preview+json"
},
method: "DELETE",
params: {
access_token: {
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/grant"
},
deleteInstallation: {
headers: {
accept: "application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json"
},
method: "DELETE",
params: {
installation_id: {
required: true,
type: "integer"
}
},
url: "/app/installations/:installation_id"
},
deleteToken: {
headers: {
accept: "application/vnd.github.doctor-strange-preview+json"
},
method: "DELETE",
params: {
access_token: {
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/token"
},
findOrgInstallation: {
deprecated: "octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)",
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/installation"
},
findRepoInstallation: {
deprecated: "octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)",
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/installation"
},
findUserInstallation: {
deprecated: "octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)",
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
username: {
required: true,
type: "string"
}
},
url: "/users/:username/installation"
},
getAuthenticated: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {},
url: "/app"
},
getBySlug: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
app_slug: {
required: true,
type: "string"
}
},
url: "/apps/:app_slug"
},
getInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
installation_id: {
required: true,
type: "integer"
}
},
url: "/app/installations/:installation_id"
},
getOrgInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/installation"
},
getRepoInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/installation"
},
getUserInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
username: {
required: true,
type: "string"
}
},
url: "/users/:username/installation"
},
listAccountsUserOrOrgOnPlan: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
plan_id: {
required: true,
type: "integer"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/marketplace_listing/plans/:plan_id/accounts"
},
listAccountsUserOrOrgOnPlanStubbed: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
plan_id: {
required: true,
type: "integer"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/marketplace_listing/stubbed/plans/:plan_id/accounts"
},
listInstallationReposForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
installation_id: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/installations/:installation_id/repositories"
},
listInstallations: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/app/installations"
},
listInstallationsForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/installations"
},
listMarketplacePurchasesForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/marketplace_purchases"
},
listMarketplacePurchasesForAuthenticatedUserStubbed: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/marketplace_purchases/stubbed"
},
listPlans: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/marketplace_listing/plans"
},
listPlansStubbed: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/marketplace_listing/stubbed/plans"
},
listRepos: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/installation/repositories"
},
removeRepoFromInstallation: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "DELETE",
params: {
installation_id: {
required: true,
type: "integer"
},
repository_id: {
required: true,
type: "integer"
}
},
url: "/user/installations/:installation_id/repositories/:repository_id"
},
resetAuthorization: {
deprecated: "octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization",
method: "POST",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
resetToken: {
headers: {
accept: "application/vnd.github.doctor-strange-preview+json"
},
method: "PATCH",
params: {
access_token: {
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/token"
},
revokeAuthorizationForApplication: {
deprecated: "octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application",
method: "DELETE",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
revokeGrantForApplication: {
deprecated: "octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application",
method: "DELETE",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/grants/:access_token"
},
revokeInstallationToken: {
headers: {
accept: "application/vnd.github.gambit-preview+json"
},
method: "DELETE",
params: {},
url: "/installation/token"
}
},
checks: {
create: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "POST",
params: {
actions: {
type: "object[]"
},
"actions[].description": {
required: true,
type: "string"
},
"actions[].identifier": {
required: true,
type: "string"
},
"actions[].label": {
required: true,
type: "string"
},
completed_at: {
type: "string"
},
conclusion: {
enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"],
type: "string"
},
details_url: {
type: "string"
},
external_id: {
type: "string"
},
head_sha: {
required: true,
type: "string"
},
name: {
required: true,
type: "string"
},
output: {
type: "object"
},
"output.annotations": {
type: "object[]"
},
"output.annotations[].annotation_level": {
enum: ["notice", "warning", "failure"],
required: true,
type: "string"
},
"output.annotations[].end_column": {
type: "integer"
},
"output.annotations[].end_line": {
required: true,
type: "integer"
},
"output.annotations[].message": {
required: true,
type: "string"
},
"output.annotations[].path": {
required: true,
type: "string"
},
"output.annotations[].raw_details": {
type: "string"
},
"output.annotations[].start_column": {
type: "integer"
},
"output.annotations[].start_line": {
required: true,
type: "integer"
},
"output.annotations[].title": {
type: "string"
},
"output.images": {
type: "object[]"
},
"output.images[].alt": {
required: true,
type: "string"
},
"output.images[].caption": {
type: "string"
},
"output.images[].image_url": {
required: true,
type: "string"
},
"output.summary": {
required: true,
type: "string"
},
"output.text": {
type: "string"
},
"output.title": {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
started_at: {
type: "string"
},
status: {
enum: ["queued", "in_progress", "completed"],
type: "string"
}
},
url: "/repos/:owner/:repo/check-runs"
},
createSuite: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "POST",
params: {
head_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-suites"
},
get: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
check_run_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-runs/:check_run_id"
},
getSuite: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
check_suite_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-suites/:check_suite_id"
},
listAnnotations: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
check_run_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-runs/:check_run_id/annotations"
},
listForRef: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
check_name: {
type: "string"
},
filter: {
enum: ["latest", "all"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
status: {
enum: ["queued", "in_progress", "completed"],
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref/check-runs"
},
listForSuite: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
check_name: {
type: "string"
},
check_suite_id: {
required: true,
type: "integer"
},
filter: {
enum: ["latest", "all"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
status: {
enum: ["queued", "in_progress", "completed"],
type: "string"
}
},
url: "/repos/:owner/:repo/check-suites/:check_suite_id/check-runs"
},
listSuitesForRef: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "GET",
params: {
app_id: {
type: "integer"
},
check_name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref/check-suites"
},
rerequestSuite: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "POST",
params: {
check_suite_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-suites/:check_suite_id/rerequest"
},
setSuitesPreferences: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "PATCH",
params: {
auto_trigger_checks: {
type: "object[]"
},
"auto_trigger_checks[].app_id": {
required: true,
type: "integer"
},
"auto_trigger_checks[].setting": {
required: true,
type: "boolean"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/check-suites/preferences"
},
update: {
headers: {
accept: "application/vnd.github.antiope-preview+json"
},
method: "PATCH",
params: {
actions: {
type: "object[]"
},
"actions[].description": {
required: true,
type: "string"
},
"actions[].identifier": {
required: true,
type: "string"
},
"actions[].label": {
required: true,
type: "string"
},
check_run_id: {
required: true,
type: "integer"
},
completed_at: {
type: "string"
},
conclusion: {
enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"],
type: "string"
},
details_url: {
type: "string"
},
external_id: {
type: "string"
},
name: {
type: "string"
},
output: {
type: "object"
},
"output.annotations": {
type: "object[]"
},
"output.annotations[].annotation_level": {
enum: ["notice", "warning", "failure"],
required: true,
type: "string"
},
"output.annotations[].end_column": {
type: "integer"
},
"output.annotations[].end_line": {
required: true,
type: "integer"
},
"output.annotations[].message": {
required: true,
type: "string"
},
"output.annotations[].path": {
required: true,
type: "string"
},
"output.annotations[].raw_details": {
type: "string"
},
"output.annotations[].start_column": {
type: "integer"
},
"output.annotations[].start_line": {
required: true,
type: "integer"
},
"output.annotations[].title": {
type: "string"
},
"output.images": {
type: "object[]"
},
"output.images[].alt": {
required: true,
type: "string"
},
"output.images[].caption": {
type: "string"
},
"output.images[].image_url": {
required: true,
type: "string"
},
"output.summary": {
required: true,
type: "string"
},
"output.text": {
type: "string"
},
"output.title": {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
started_at: {
type: "string"
},
status: {
enum: ["queued", "in_progress", "completed"],
type: "string"
}
},
url: "/repos/:owner/:repo/check-runs/:check_run_id"
}
},
codesOfConduct: {
getConductCode: {
headers: {
accept: "application/vnd.github.scarlet-witch-preview+json"
},
method: "GET",
params: {
key: {
required: true,
type: "string"
}
},
url: "/codes_of_conduct/:key"
},
getForRepo: {
headers: {
accept: "application/vnd.github.scarlet-witch-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/community/code_of_conduct"
},
listConductCodes: {
headers: {
accept: "application/vnd.github.scarlet-witch-preview+json"
},
method: "GET",
params: {},
url: "/codes_of_conduct"
}
},
emojis: {
get: {
method: "GET",
params: {},
url: "/emojis"
}
},
gists: {
checkIsStarred: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/star"
},
create: {
method: "POST",
params: {
description: {
type: "string"
},
files: {
required: true,
type: "object"
},
"files.content": {
type: "string"
},
public: {
type: "boolean"
}
},
url: "/gists"
},
createComment: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/comments"
},
delete: {
method: "DELETE",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id"
},
deleteComment: {
method: "DELETE",
params: {
comment_id: {
required: true,
type: "integer"
},
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/comments/:comment_id"
},
fork: {
method: "POST",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/forks"
},
get: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id"
},
getComment: {
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/comments/:comment_id"
},
getRevision: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
},
sha: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/:sha"
},
list: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
}
},
url: "/gists"
},
listComments: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/gists/:gist_id/comments"
},
listCommits: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/gists/:gist_id/commits"
},
listForks: {
method: "GET",
params: {
gist_id: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/gists/:gist_id/forks"
},
listPublic: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
}
},
url: "/gists/public"
},
listPublicForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/gists"
},
listStarred: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
}
},
url: "/gists/starred"
},
star: {
method: "PUT",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/star"
},
unstar: {
method: "DELETE",
params: {
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/star"
},
update: {
method: "PATCH",
params: {
description: {
type: "string"
},
files: {
type: "object"
},
"files.content": {
type: "string"
},
"files.filename": {
type: "string"
},
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id"
},
updateComment: {
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_id: {
required: true,
type: "integer"
},
gist_id: {
required: true,
type: "string"
}
},
url: "/gists/:gist_id/comments/:comment_id"
}
},
git: {
createBlob: {
method: "POST",
params: {
content: {
required: true,
type: "string"
},
encoding: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/blobs"
},
createCommit: {
method: "POST",
params: {
author: {
type: "object"
},
"author.date": {
type: "string"
},
"author.email": {
type: "string"
},
"author.name": {
type: "string"
},
committer: {
type: "object"
},
"committer.date": {
type: "string"
},
"committer.email": {
type: "string"
},
"committer.name": {
type: "string"
},
message: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
parents: {
required: true,
type: "string[]"
},
repo: {
required: true,
type: "string"
},
signature: {
type: "string"
},
tree: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/commits"
},
createRef: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/refs"
},
createTag: {
method: "POST",
params: {
message: {
required: true,
type: "string"
},
object: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
tag: {
required: true,
type: "string"
},
tagger: {
type: "object"
},
"tagger.date": {
type: "string"
},
"tagger.email": {
type: "string"
},
"tagger.name": {
type: "string"
},
type: {
enum: ["commit", "tree", "blob"],
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/tags"
},
createTree: {
method: "POST",
params: {
base_tree: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
tree: {
required: true,
type: "object[]"
},
"tree[].content": {
type: "string"
},
"tree[].mode": {
enum: ["100644", "100755", "040000", "160000", "120000"],
type: "string"
},
"tree[].path": {
type: "string"
},
"tree[].sha": {
allowNull: true,
type: "string"
},
"tree[].type": {
enum: ["blob", "tree", "commit"],
type: "string"
}
},
url: "/repos/:owner/:repo/git/trees"
},
deleteRef: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/refs/:ref"
},
getBlob: {
method: "GET",
params: {
file_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/blobs/:file_sha"
},
getCommit: {
method: "GET",
params: {
commit_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/commits/:commit_sha"
},
getRef: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/ref/:ref"
},
getTag: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
tag_sha: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/tags/:tag_sha"
},
getTree: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
recursive: {
enum: ["1"],
type: "integer"
},
repo: {
required: true,
type: "string"
},
tree_sha: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/trees/:tree_sha"
},
listMatchingRefs: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/matching-refs/:ref"
},
listRefs: {
method: "GET",
params: {
namespace: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/refs/:namespace"
},
updateRef: {
method: "PATCH",
params: {
force: {
type: "boolean"
},
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/git/refs/:ref"
}
},
gitignore: {
getTemplate: {
method: "GET",
params: {
name: {
required: true,
type: "string"
}
},
url: "/gitignore/templates/:name"
},
listTemplates: {
method: "GET",
params: {},
url: "/gitignore/templates"
}
},
interactions: {
addOrUpdateRestrictionsForOrg: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "PUT",
params: {
limit: {
enum: ["existing_users", "contributors_only", "collaborators_only"],
required: true,
type: "string"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/interaction-limits"
},
addOrUpdateRestrictionsForRepo: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "PUT",
params: {
limit: {
enum: ["existing_users", "contributors_only", "collaborators_only"],
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/interaction-limits"
},
getRestrictionsForOrg: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/interaction-limits"
},
getRestrictionsForRepo: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/interaction-limits"
},
removeRestrictionsForOrg: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "DELETE",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/interaction-limits"
},
removeRestrictionsForRepo: {
headers: {
accept: "application/vnd.github.sombra-preview+json"
},
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/interaction-limits"
}
},
issues: {
addAssignees: {
method: "POST",
params: {
assignees: {
type: "string[]"
},
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/assignees"
},
addLabels: {
method: "POST",
params: {
issue_number: {
required: true,
type: "integer"
},
labels: {
required: true,
type: "string[]"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/labels"
},
checkAssignee: {
method: "GET",
params: {
assignee: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/assignees/:assignee"
},
create: {
method: "POST",
params: {
assignee: {
type: "string"
},
assignees: {
type: "string[]"
},
body: {
type: "string"
},
labels: {
type: "string[]"
},
milestone: {
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
title: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues"
},
createComment: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/comments"
},
createLabel: {
method: "POST",
params: {
color: {
required: true,
type: "string"
},
description: {
type: "string"
},
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/labels"
},
createMilestone: {
method: "POST",
params: {
description: {
type: "string"
},
due_on: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["open", "closed"],
type: "string"
},
title: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/milestones"
},
deleteComment: {
method: "DELETE",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments/:comment_id"
},
deleteLabel: {
method: "DELETE",
params: {
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/labels/:name"
},
deleteMilestone: {
method: "DELETE",
params: {
milestone_number: {
required: true,
type: "integer"
},
number: {
alias: "milestone_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/milestones/:milestone_number"
},
get: {
method: "GET",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number"
},
getComment: {
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments/:comment_id"
},
getEvent: {
method: "GET",
params: {
event_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/events/:event_id"
},
getLabel: {
method: "GET",
params: {
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/labels/:name"
},
getMilestone: {
method: "GET",
params: {
milestone_number: {
required: true,
type: "integer"
},
number: {
alias: "milestone_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/milestones/:milestone_number"
},
list: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
filter: {
enum: ["assigned", "created", "mentioned", "subscribed", "all"],
type: "string"
},
labels: {
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated", "comments"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/issues"
},
listAssignees: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/assignees"
},
listComments: {
method: "GET",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/comments"
},
listCommentsForRepo: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments"
},
listEvents: {
method: "GET",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/events"
},
listEventsForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/events"
},
listEventsForTimeline: {
headers: {
accept: "application/vnd.github.mockingbird-preview+json"
},
method: "GET",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/timeline"
},
listForAuthenticatedUser: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
filter: {
enum: ["assigned", "created", "mentioned", "subscribed", "all"],
type: "string"
},
labels: {
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated", "comments"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/user/issues"
},
listForOrg: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
filter: {
enum: ["assigned", "created", "mentioned", "subscribed", "all"],
type: "string"
},
labels: {
type: "string"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated", "comments"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/orgs/:org/issues"
},
listForRepo: {
method: "GET",
params: {
assignee: {
type: "string"
},
creator: {
type: "string"
},
direction: {
enum: ["asc", "desc"],
type: "string"
},
labels: {
type: "string"
},
mentioned: {
type: "string"
},
milestone: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated", "comments"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/repos/:owner/:repo/issues"
},
listLabelsForMilestone: {
method: "GET",
params: {
milestone_number: {
required: true,
type: "integer"
},
number: {
alias: "milestone_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/milestones/:milestone_number/labels"
},
listLabelsForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/labels"
},
listLabelsOnIssue: {
method: "GET",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/labels"
},
listMilestonesForRepo: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
sort: {
enum: ["due_on", "completeness"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/repos/:owner/:repo/milestones"
},
lock: {
method: "PUT",
params: {
issue_number: {
required: true,
type: "integer"
},
lock_reason: {
enum: ["off-topic", "too heated", "resolved", "spam"],
type: "string"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/lock"
},
removeAssignees: {
method: "DELETE",
params: {
assignees: {
type: "string[]"
},
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/assignees"
},
removeLabel: {
method: "DELETE",
params: {
issue_number: {
required: true,
type: "integer"
},
name: {
required: true,
type: "string"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/labels/:name"
},
removeLabels: {
method: "DELETE",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/labels"
},
replaceLabels: {
method: "PUT",
params: {
issue_number: {
required: true,
type: "integer"
},
labels: {
type: "string[]"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/labels"
},
unlock: {
method: "DELETE",
params: {
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/lock"
},
update: {
method: "PATCH",
params: {
assignee: {
type: "string"
},
assignees: {
type: "string[]"
},
body: {
type: "string"
},
issue_number: {
required: true,
type: "integer"
},
labels: {
type: "string[]"
},
milestone: {
allowNull: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["open", "closed"],
type: "string"
},
title: {
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number"
},
updateComment: {
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments/:comment_id"
},
updateLabel: {
method: "PATCH",
params: {
color: {
type: "string"
},
current_name: {
required: true,
type: "string"
},
description: {
type: "string"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/labels/:current_name"
},
updateMilestone: {
method: "PATCH",
params: {
description: {
type: "string"
},
due_on: {
type: "string"
},
milestone_number: {
required: true,
type: "integer"
},
number: {
alias: "milestone_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["open", "closed"],
type: "string"
},
title: {
type: "string"
}
},
url: "/repos/:owner/:repo/milestones/:milestone_number"
}
},
licenses: {
get: {
method: "GET",
params: {
license: {
required: true,
type: "string"
}
},
url: "/licenses/:license"
},
getForRepo: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/license"
},
list: {
deprecated: "octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)",
method: "GET",
params: {},
url: "/licenses"
},
listCommonlyUsed: {
method: "GET",
params: {},
url: "/licenses"
}
},
markdown: {
render: {
method: "POST",
params: {
context: {
type: "string"
},
mode: {
enum: ["markdown", "gfm"],
type: "string"
},
text: {
required: true,
type: "string"
}
},
url: "/markdown"
},
renderRaw: {
headers: {
"content-type": "text/plain; charset=utf-8"
},
method: "POST",
params: {
data: {
mapTo: "data",
required: true,
type: "string"
}
},
url: "/markdown/raw"
}
},
meta: {
get: {
method: "GET",
params: {},
url: "/meta"
}
},
migrations: {
cancelImport: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/import"
},
deleteArchiveForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "DELETE",
params: {
migration_id: {
required: true,
type: "integer"
}
},
url: "/user/migrations/:migration_id/archive"
},
deleteArchiveForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "DELETE",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/migrations/:migration_id/archive"
},
downloadArchiveForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/migrations/:migration_id/archive"
},
getArchiveForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
}
},
url: "/user/migrations/:migration_id/archive"
},
getArchiveForOrg: {
deprecated: "octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)",
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/migrations/:migration_id/archive"
},
getCommitAuthors: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
}
},
url: "/repos/:owner/:repo/import/authors"
},
getImportProgress: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/import"
},
getLargeFiles: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/import/large_files"
},
getStatusForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
}
},
url: "/user/migrations/:migration_id"
},
getStatusForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/migrations/:migration_id"
},
listForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/migrations"
},
listForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/migrations"
},
listReposForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/migrations/:migration_id/repositories"
},
listReposForUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "GET",
params: {
migration_id: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/:migration_id/repositories"
},
mapCommitAuthor: {
method: "PATCH",
params: {
author_id: {
required: true,
type: "integer"
},
email: {
type: "string"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/import/authors/:author_id"
},
setLfsPreference: {
method: "PATCH",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
use_lfs: {
enum: ["opt_in", "opt_out"],
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/import/lfs"
},
startForAuthenticatedUser: {
method: "POST",
params: {
exclude_attachments: {
type: "boolean"
},
lock_repositories: {
type: "boolean"
},
repositories: {
required: true,
type: "string[]"
}
},
url: "/user/migrations"
},
startForOrg: {
method: "POST",
params: {
exclude_attachments: {
type: "boolean"
},
lock_repositories: {
type: "boolean"
},
org: {
required: true,
type: "string"
},
repositories: {
required: true,
type: "string[]"
}
},
url: "/orgs/:org/migrations"
},
startImport: {
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
tfvc_project: {
type: "string"
},
vcs: {
enum: ["subversion", "git", "mercurial", "tfvc"],
type: "string"
},
vcs_password: {
type: "string"
},
vcs_url: {
required: true,
type: "string"
},
vcs_username: {
type: "string"
}
},
url: "/repos/:owner/:repo/import"
},
unlockRepoForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "DELETE",
params: {
migration_id: {
required: true,
type: "integer"
},
repo_name: {
required: true,
type: "string"
}
},
url: "/user/migrations/:migration_id/repos/:repo_name/lock"
},
unlockRepoForOrg: {
headers: {
accept: "application/vnd.github.wyandotte-preview+json"
},
method: "DELETE",
params: {
migration_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
repo_name: {
required: true,
type: "string"
}
},
url: "/orgs/:org/migrations/:migration_id/repos/:repo_name/lock"
},
updateImport: {
method: "PATCH",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
vcs_password: {
type: "string"
},
vcs_username: {
type: "string"
}
},
url: "/repos/:owner/:repo/import"
}
},
oauthAuthorizations: {
checkAuthorization: {
deprecated: "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)",
method: "GET",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
createAuthorization: {
deprecated: "octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization",
method: "POST",
params: {
client_id: {
type: "string"
},
client_secret: {
type: "string"
},
fingerprint: {
type: "string"
},
note: {
required: true,
type: "string"
},
note_url: {
type: "string"
},
scopes: {
type: "string[]"
}
},
url: "/authorizations"
},
deleteAuthorization: {
deprecated: "octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization",
method: "DELETE",
params: {
authorization_id: {
required: true,
type: "integer"
}
},
url: "/authorizations/:authorization_id"
},
deleteGrant: {
deprecated: "octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant",
method: "DELETE",
params: {
grant_id: {
required: true,
type: "integer"
}
},
url: "/applications/grants/:grant_id"
},
getAuthorization: {
deprecated: "octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization",
method: "GET",
params: {
authorization_id: {
required: true,
type: "integer"
}
},
url: "/authorizations/:authorization_id"
},
getGrant: {
deprecated: "octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant",
method: "GET",
params: {
grant_id: {
required: true,
type: "integer"
}
},
url: "/applications/grants/:grant_id"
},
getOrCreateAuthorizationForApp: {
deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app",
method: "PUT",
params: {
client_id: {
required: true,
type: "string"
},
client_secret: {
required: true,
type: "string"
},
fingerprint: {
type: "string"
},
note: {
type: "string"
},
note_url: {
type: "string"
},
scopes: {
type: "string[]"
}
},
url: "/authorizations/clients/:client_id"
},
getOrCreateAuthorizationForAppAndFingerprint: {
deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint",
method: "PUT",
params: {
client_id: {
required: true,
type: "string"
},
client_secret: {
required: true,
type: "string"
},
fingerprint: {
required: true,
type: "string"
},
note: {
type: "string"
},
note_url: {
type: "string"
},
scopes: {
type: "string[]"
}
},
url: "/authorizations/clients/:client_id/:fingerprint"
},
getOrCreateAuthorizationForAppFingerprint: {
deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)",
method: "PUT",
params: {
client_id: {
required: true,
type: "string"
},
client_secret: {
required: true,
type: "string"
},
fingerprint: {
required: true,
type: "string"
},
note: {
type: "string"
},
note_url: {
type: "string"
},
scopes: {
type: "string[]"
}
},
url: "/authorizations/clients/:client_id/:fingerprint"
},
listAuthorizations: {
deprecated: "octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/authorizations"
},
listGrants: {
deprecated: "octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/applications/grants"
},
resetAuthorization: {
deprecated: "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)",
method: "POST",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
revokeAuthorizationForApplication: {
deprecated: "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)",
method: "DELETE",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/tokens/:access_token"
},
revokeGrantForApplication: {
deprecated: "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)",
method: "DELETE",
params: {
access_token: {
required: true,
type: "string"
},
client_id: {
required: true,
type: "string"
}
},
url: "/applications/:client_id/grants/:access_token"
},
updateAuthorization: {
deprecated: "octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization",
method: "PATCH",
params: {
add_scopes: {
type: "string[]"
},
authorization_id: {
required: true,
type: "integer"
},
fingerprint: {
type: "string"
},
note: {
type: "string"
},
note_url: {
type: "string"
},
remove_scopes: {
type: "string[]"
},
scopes: {
type: "string[]"
}
},
url: "/authorizations/:authorization_id"
}
},
orgs: {
addOrUpdateMembership: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
role: {
enum: ["admin", "member"],
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/memberships/:username"
},
blockUser: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/blocks/:username"
},
checkBlockedUser: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/blocks/:username"
},
checkMembership: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/members/:username"
},
checkPublicMembership: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/public_members/:username"
},
concealMembership: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/public_members/:username"
},
convertMemberToOutsideCollaborator: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/outside_collaborators/:username"
},
createHook: {
method: "POST",
params: {
active: {
type: "boolean"
},
config: {
required: true,
type: "object"
},
"config.content_type": {
type: "string"
},
"config.insecure_ssl": {
type: "string"
},
"config.secret": {
type: "string"
},
"config.url": {
required: true,
type: "string"
},
events: {
type: "string[]"
},
name: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/hooks"
},
createInvitation: {
method: "POST",
params: {
email: {
type: "string"
},
invitee_id: {
type: "integer"
},
org: {
required: true,
type: "string"
},
role: {
enum: ["admin", "direct_member", "billing_manager"],
type: "string"
},
team_ids: {
type: "integer[]"
}
},
url: "/orgs/:org/invitations"
},
deleteHook: {
method: "DELETE",
params: {
hook_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/hooks/:hook_id"
},
get: {
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org"
},
getHook: {
method: "GET",
params: {
hook_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/hooks/:hook_id"
},
getMembership: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/memberships/:username"
},
getMembershipForAuthenticatedUser: {
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/user/memberships/orgs/:org"
},
list: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "integer"
}
},
url: "/organizations"
},
listBlockedUsers: {
method: "GET",
params: {
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/blocks"
},
listForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/orgs"
},
listForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/orgs"
},
listHooks: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/hooks"
},
listInstallations: {
headers: {
accept: "application/vnd.github.machine-man-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/installations"
},
listInvitationTeams: {
method: "GET",
params: {
invitation_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/invitations/:invitation_id/teams"
},
listMembers: {
method: "GET",
params: {
filter: {
enum: ["2fa_disabled", "all"],
type: "string"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
role: {
enum: ["all", "admin", "member"],
type: "string"
}
},
url: "/orgs/:org/members"
},
listMemberships: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
state: {
enum: ["active", "pending"],
type: "string"
}
},
url: "/user/memberships/orgs"
},
listOutsideCollaborators: {
method: "GET",
params: {
filter: {
enum: ["2fa_disabled", "all"],
type: "string"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/outside_collaborators"
},
listPendingInvitations: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/invitations"
},
listPublicMembers: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/public_members"
},
pingHook: {
method: "POST",
params: {
hook_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/hooks/:hook_id/pings"
},
publicizeMembership: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/public_members/:username"
},
removeMember: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/members/:username"
},
removeMembership: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/memberships/:username"
},
removeOutsideCollaborator: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/outside_collaborators/:username"
},
unblockUser: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/blocks/:username"
},
update: {
method: "PATCH",
params: {
billing_email: {
type: "string"
},
company: {
type: "string"
},
default_repository_permission: {
enum: ["read", "write", "admin", "none"],
type: "string"
},
description: {
type: "string"
},
email: {
type: "string"
},
has_organization_projects: {
type: "boolean"
},
has_repository_projects: {
type: "boolean"
},
location: {
type: "string"
},
members_allowed_repository_creation_type: {
enum: ["all", "private", "none"],
type: "string"
},
members_can_create_internal_repositories: {
type: "boolean"
},
members_can_create_private_repositories: {
type: "boolean"
},
members_can_create_public_repositories: {
type: "boolean"
},
members_can_create_repositories: {
type: "boolean"
},
name: {
type: "string"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org"
},
updateHook: {
method: "PATCH",
params: {
active: {
type: "boolean"
},
config: {
type: "object"
},
"config.content_type": {
type: "string"
},
"config.insecure_ssl": {
type: "string"
},
"config.secret": {
type: "string"
},
"config.url": {
required: true,
type: "string"
},
events: {
type: "string[]"
},
hook_id: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/hooks/:hook_id"
},
updateMembership: {
method: "PATCH",
params: {
org: {
required: true,
type: "string"
},
state: {
enum: ["active"],
required: true,
type: "string"
}
},
url: "/user/memberships/orgs/:org"
}
},
projects: {
addCollaborator: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PUT",
params: {
permission: {
enum: ["read", "write", "admin"],
type: "string"
},
project_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/projects/:project_id/collaborators/:username"
},
createCard: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
column_id: {
required: true,
type: "integer"
},
content_id: {
type: "integer"
},
content_type: {
type: "string"
},
note: {
type: "string"
}
},
url: "/projects/columns/:column_id/cards"
},
createColumn: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
name: {
required: true,
type: "string"
},
project_id: {
required: true,
type: "integer"
}
},
url: "/projects/:project_id/columns"
},
createForAuthenticatedUser: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
body: {
type: "string"
},
name: {
required: true,
type: "string"
}
},
url: "/user/projects"
},
createForOrg: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
body: {
type: "string"
},
name: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
}
},
url: "/orgs/:org/projects"
},
createForRepo: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
body: {
type: "string"
},
name: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/projects"
},
delete: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "DELETE",
params: {
project_id: {
required: true,
type: "integer"
}
},
url: "/projects/:project_id"
},
deleteCard: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "DELETE",
params: {
card_id: {
required: true,
type: "integer"
}
},
url: "/projects/columns/cards/:card_id"
},
deleteColumn: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "DELETE",
params: {
column_id: {
required: true,
type: "integer"
}
},
url: "/projects/columns/:column_id"
},
get: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
project_id: {
required: true,
type: "integer"
}
},
url: "/projects/:project_id"
},
getCard: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
card_id: {
required: true,
type: "integer"
}
},
url: "/projects/columns/cards/:card_id"
},
getColumn: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
column_id: {
required: true,
type: "integer"
}
},
url: "/projects/columns/:column_id"
},
listCards: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
archived_state: {
enum: ["all", "archived", "not_archived"],
type: "string"
},
column_id: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/projects/columns/:column_id/cards"
},
listCollaborators: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
affiliation: {
enum: ["outside", "direct", "all"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
project_id: {
required: true,
type: "integer"
}
},
url: "/projects/:project_id/collaborators"
},
listColumns: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
project_id: {
required: true,
type: "integer"
}
},
url: "/projects/:project_id/columns"
},
listForOrg: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/orgs/:org/projects"
},
listForRepo: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/repos/:owner/:repo/projects"
},
listForUser: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/projects"
},
moveCard: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
card_id: {
required: true,
type: "integer"
},
column_id: {
type: "integer"
},
position: {
required: true,
type: "string",
validation: "^(top|bottom|after:\\d+)$"
}
},
url: "/projects/columns/cards/:card_id/moves"
},
moveColumn: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "POST",
params: {
column_id: {
required: true,
type: "integer"
},
position: {
required: true,
type: "string",
validation: "^(first|last|after:\\d+)$"
}
},
url: "/projects/columns/:column_id/moves"
},
removeCollaborator: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "DELETE",
params: {
project_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/projects/:project_id/collaborators/:username"
},
reviewUserPermissionLevel: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
project_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/projects/:project_id/collaborators/:username/permission"
},
update: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PATCH",
params: {
body: {
type: "string"
},
name: {
type: "string"
},
organization_permission: {
type: "string"
},
private: {
type: "boolean"
},
project_id: {
required: true,
type: "integer"
},
state: {
enum: ["open", "closed"],
type: "string"
}
},
url: "/projects/:project_id"
},
updateCard: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PATCH",
params: {
archived: {
type: "boolean"
},
card_id: {
required: true,
type: "integer"
},
note: {
type: "string"
}
},
url: "/projects/columns/cards/:card_id"
},
updateColumn: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PATCH",
params: {
column_id: {
required: true,
type: "integer"
},
name: {
required: true,
type: "string"
}
},
url: "/projects/columns/:column_id"
}
},
pulls: {
checkIfMerged: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/merge"
},
create: {
method: "POST",
params: {
base: {
required: true,
type: "string"
},
body: {
type: "string"
},
draft: {
type: "boolean"
},
head: {
required: true,
type: "string"
},
maintainer_can_modify: {
type: "boolean"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
title: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls"
},
createComment: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
commit_id: {
required: true,
type: "string"
},
in_reply_to: {
deprecated: true,
description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
type: "integer"
},
line: {
type: "integer"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
position: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
side: {
enum: ["LEFT", "RIGHT"],
type: "string"
},
start_line: {
type: "integer"
},
start_side: {
enum: ["LEFT", "RIGHT", "side"],
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/comments"
},
createCommentReply: {
deprecated: "octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)",
method: "POST",
params: {
body: {
required: true,
type: "string"
},
commit_id: {
required: true,
type: "string"
},
in_reply_to: {
deprecated: true,
description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.",
type: "integer"
},
line: {
type: "integer"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
position: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
side: {
enum: ["LEFT", "RIGHT"],
type: "string"
},
start_line: {
type: "integer"
},
start_side: {
enum: ["LEFT", "RIGHT", "side"],
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/comments"
},
createFromIssue: {
deprecated: "octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request",
method: "POST",
params: {
base: {
required: true,
type: "string"
},
draft: {
type: "boolean"
},
head: {
required: true,
type: "string"
},
issue: {
required: true,
type: "integer"
},
maintainer_can_modify: {
type: "boolean"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls"
},
createReview: {
method: "POST",
params: {
body: {
type: "string"
},
comments: {
type: "object[]"
},
"comments[].body": {
required: true,
type: "string"
},
"comments[].path": {
required: true,
type: "string"
},
"comments[].position": {
required: true,
type: "integer"
},
commit_id: {
type: "string"
},
event: {
enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews"
},
createReviewCommentReply: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies"
},
createReviewRequest: {
method: "POST",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
reviewers: {
type: "string[]"
},
team_reviewers: {
type: "string[]"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
},
deleteComment: {
method: "DELETE",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments/:comment_id"
},
deletePendingReview: {
method: "DELETE",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
},
deleteReviewRequest: {
method: "DELETE",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
reviewers: {
type: "string[]"
},
team_reviewers: {
type: "string[]"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
},
dismissReview: {
method: "PUT",
params: {
message: {
required: true,
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals"
},
get: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number"
},
getComment: {
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments/:comment_id"
},
getCommentsForReview: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments"
},
getReview: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
},
list: {
method: "GET",
params: {
base: {
type: "string"
},
direction: {
enum: ["asc", "desc"],
type: "string"
},
head: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
sort: {
enum: ["created", "updated", "popularity", "long-running"],
type: "string"
},
state: {
enum: ["open", "closed", "all"],
type: "string"
}
},
url: "/repos/:owner/:repo/pulls"
},
listComments: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/comments"
},
listCommentsForRepo: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
since: {
type: "string"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments"
},
listCommits: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/commits"
},
listFiles: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/files"
},
listReviewRequests: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers"
},
listReviews: {
method: "GET",
params: {
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews"
},
merge: {
method: "PUT",
params: {
commit_message: {
type: "string"
},
commit_title: {
type: "string"
},
merge_method: {
enum: ["merge", "squash", "rebase"],
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/merge"
},
submitReview: {
method: "POST",
params: {
body: {
type: "string"
},
event: {
enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"],
required: true,
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events"
},
update: {
method: "PATCH",
params: {
base: {
type: "string"
},
body: {
type: "string"
},
maintainer_can_modify: {
type: "boolean"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["open", "closed"],
type: "string"
},
title: {
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number"
},
updateBranch: {
headers: {
accept: "application/vnd.github.lydian-preview+json"
},
method: "PUT",
params: {
expected_head_sha: {
type: "string"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/update-branch"
},
updateComment: {
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments/:comment_id"
},
updateReview: {
method: "PUT",
params: {
body: {
required: true,
type: "string"
},
number: {
alias: "pull_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
pull_number: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
review_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id"
}
},
rateLimit: {
get: {
method: "GET",
params: {},
url: "/rate_limit"
}
},
reactions: {
createForCommitComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments/:comment_id/reactions"
},
createForIssue: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/reactions"
},
createForIssueComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions"
},
createForPullRequestReviewComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions"
},
createForTeamDiscussion: {
deprecated: "octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/reactions"
},
createForTeamDiscussionComment: {
deprecated: "octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
},
createForTeamDiscussionCommentInOrg: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions"
},
createForTeamDiscussionCommentLegacy: {
deprecated: "octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
},
createForTeamDiscussionInOrg: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions"
},
createForTeamDiscussionLegacy: {
deprecated: "octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "POST",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/reactions"
},
delete: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "DELETE",
params: {
reaction_id: {
required: true,
type: "integer"
}
},
url: "/reactions/:reaction_id"
},
listForCommitComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments/:comment_id/reactions"
},
listForIssue: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
issue_number: {
required: true,
type: "integer"
},
number: {
alias: "issue_number",
deprecated: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/:issue_number/reactions"
},
listForIssueComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions"
},
listForPullRequestReviewComment: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions"
},
listForTeamDiscussion: {
deprecated: "octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/reactions"
},
listForTeamDiscussionComment: {
deprecated: "octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
},
listForTeamDiscussionCommentInOrg: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions"
},
listForTeamDiscussionCommentLegacy: {
deprecated: "octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions"
},
listForTeamDiscussionInOrg: {
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions"
},
listForTeamDiscussionLegacy: {
deprecated: "octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy",
headers: {
accept: "application/vnd.github.squirrel-girl-preview+json"
},
method: "GET",
params: {
content: {
enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/reactions"
}
},
repos: {
acceptInvitation: {
method: "PATCH",
params: {
invitation_id: {
required: true,
type: "integer"
}
},
url: "/user/repository_invitations/:invitation_id"
},
addCollaborator: {
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
repo: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/collaborators/:username"
},
addDeployKey: {
method: "POST",
params: {
key: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
read_only: {
type: "boolean"
},
repo: {
required: true,
type: "string"
},
title: {
type: "string"
}
},
url: "/repos/:owner/:repo/keys"
},
addProtectedBranchAdminEnforcement: {
method: "POST",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
},
addProtectedBranchAppRestrictions: {
method: "POST",
params: {
apps: {
mapTo: "data",
required: true,
type: "string[]"
},
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
},
addProtectedBranchRequiredSignatures: {
headers: {
accept: "application/vnd.github.zzzax-preview+json"
},
method: "POST",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
},
addProtectedBranchRequiredStatusChecksContexts: {
method: "POST",
params: {
branch: {
required: true,
type: "string"
},
contexts: {
mapTo: "data",
required: true,
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
},
addProtectedBranchTeamRestrictions: {
method: "POST",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
teams: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
addProtectedBranchUserRestrictions: {
method: "POST",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
users: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
checkCollaborator: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/collaborators/:username"
},
checkVulnerabilityAlerts: {
headers: {
accept: "application/vnd.github.dorian-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/vulnerability-alerts"
},
compareCommits: {
method: "GET",
params: {
base: {
required: true,
type: "string"
},
head: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/compare/:base...:head"
},
createCommitComment: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
commit_sha: {
required: true,
type: "string"
},
line: {
type: "integer"
},
owner: {
required: true,
type: "string"
},
path: {
type: "string"
},
position: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
sha: {
alias: "commit_sha",
deprecated: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:commit_sha/comments"
},
createDeployment: {
method: "POST",
params: {
auto_merge: {
type: "boolean"
},
description: {
type: "string"
},
environment: {
type: "string"
},
owner: {
required: true,
type: "string"
},
payload: {
type: "string"
},
production_environment: {
type: "boolean"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
required_contexts: {
type: "string[]"
},
task: {
type: "string"
},
transient_environment: {
type: "boolean"
}
},
url: "/repos/:owner/:repo/deployments"
},
createDeploymentStatus: {
method: "POST",
params: {
auto_inactive: {
type: "boolean"
},
deployment_id: {
required: true,
type: "integer"
},
description: {
type: "string"
},
environment: {
enum: ["production", "staging", "qa"],
type: "string"
},
environment_url: {
type: "string"
},
log_url: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
state: {
enum: ["error", "failure", "inactive", "in_progress", "queued", "pending", "success"],
required: true,
type: "string"
},
target_url: {
type: "string"
}
},
url: "/repos/:owner/:repo/deployments/:deployment_id/statuses"
},
createDispatchEvent: {
method: "POST",
params: {
client_payload: {
type: "object"
},
event_type: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/dispatches"
},
createFile: {
deprecated: "octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)",
method: "PUT",
params: {
author: {
type: "object"
},
"author.email": {
required: true,
type: "string"
},
"author.name": {
required: true,
type: "string"
},
branch: {
type: "string"
},
committer: {
type: "object"
},
"committer.email": {
required: true,
type: "string"
},
"committer.name": {
required: true,
type: "string"
},
content: {
required: true,
type: "string"
},
message: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
}
},
url: "/repos/:owner/:repo/contents/:path"
},
createForAuthenticatedUser: {
method: "POST",
params: {
allow_merge_commit: {
type: "boolean"
},
allow_rebase_merge: {
type: "boolean"
},
allow_squash_merge: {
type: "boolean"
},
auto_init: {
type: "boolean"
},
delete_branch_on_merge: {
type: "boolean"
},
description: {
type: "string"
},
gitignore_template: {
type: "string"
},
has_issues: {
type: "boolean"
},
has_projects: {
type: "boolean"
},
has_wiki: {
type: "boolean"
},
homepage: {
type: "string"
},
is_template: {
type: "boolean"
},
license_template: {
type: "string"
},
name: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
team_id: {
type: "integer"
},
visibility: {
enum: ["public", "private", "visibility", "internal"],
type: "string"
}
},
url: "/user/repos"
},
createFork: {
method: "POST",
params: {
organization: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/forks"
},
createHook: {
method: "POST",
params: {
active: {
type: "boolean"
},
config: {
required: true,
type: "object"
},
"config.content_type": {
type: "string"
},
"config.insecure_ssl": {
type: "string"
},
"config.secret": {
type: "string"
},
"config.url": {
required: true,
type: "string"
},
events: {
type: "string[]"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks"
},
createInOrg: {
method: "POST",
params: {
allow_merge_commit: {
type: "boolean"
},
allow_rebase_merge: {
type: "boolean"
},
allow_squash_merge: {
type: "boolean"
},
auto_init: {
type: "boolean"
},
delete_branch_on_merge: {
type: "boolean"
},
description: {
type: "string"
},
gitignore_template: {
type: "string"
},
has_issues: {
type: "boolean"
},
has_projects: {
type: "boolean"
},
has_wiki: {
type: "boolean"
},
homepage: {
type: "string"
},
is_template: {
type: "boolean"
},
license_template: {
type: "string"
},
name: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
team_id: {
type: "integer"
},
visibility: {
enum: ["public", "private", "visibility", "internal"],
type: "string"
}
},
url: "/orgs/:org/repos"
},
createOrUpdateFile: {
method: "PUT",
params: {
author: {
type: "object"
},
"author.email": {
required: true,
type: "string"
},
"author.name": {
required: true,
type: "string"
},
branch: {
type: "string"
},
committer: {
type: "object"
},
"committer.email": {
required: true,
type: "string"
},
"committer.name": {
required: true,
type: "string"
},
content: {
required: true,
type: "string"
},
message: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
}
},
url: "/repos/:owner/:repo/contents/:path"
},
createRelease: {
method: "POST",
params: {
body: {
type: "string"
},
draft: {
type: "boolean"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
prerelease: {
type: "boolean"
},
repo: {
required: true,
type: "string"
},
tag_name: {
required: true,
type: "string"
},
target_commitish: {
type: "string"
}
},
url: "/repos/:owner/:repo/releases"
},
createStatus: {
method: "POST",
params: {
context: {
type: "string"
},
description: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
required: true,
type: "string"
},
state: {
enum: ["error", "failure", "pending", "success"],
required: true,
type: "string"
},
target_url: {
type: "string"
}
},
url: "/repos/:owner/:repo/statuses/:sha"
},
createUsingTemplate: {
headers: {
accept: "application/vnd.github.baptiste-preview+json"
},
method: "POST",
params: {
description: {
type: "string"
},
name: {
required: true,
type: "string"
},
owner: {
type: "string"
},
private: {
type: "boolean"
},
template_owner: {
required: true,
type: "string"
},
template_repo: {
required: true,
type: "string"
}
},
url: "/repos/:template_owner/:template_repo/generate"
},
declineInvitation: {
method: "DELETE",
params: {
invitation_id: {
required: true,
type: "integer"
}
},
url: "/user/repository_invitations/:invitation_id"
},
delete: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo"
},
deleteCommitComment: {
method: "DELETE",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments/:comment_id"
},
deleteDownload: {
method: "DELETE",
params: {
download_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/downloads/:download_id"
},
deleteFile: {
method: "DELETE",
params: {
author: {
type: "object"
},
"author.email": {
type: "string"
},
"author.name": {
type: "string"
},
branch: {
type: "string"
},
committer: {
type: "object"
},
"committer.email": {
type: "string"
},
"committer.name": {
type: "string"
},
message: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/contents/:path"
},
deleteHook: {
method: "DELETE",
params: {
hook_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks/:hook_id"
},
deleteInvitation: {
method: "DELETE",
params: {
invitation_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/invitations/:invitation_id"
},
deleteRelease: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
release_id: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/:release_id"
},
deleteReleaseAsset: {
method: "DELETE",
params: {
asset_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/assets/:asset_id"
},
disableAutomatedSecurityFixes: {
headers: {
accept: "application/vnd.github.london-preview+json"
},
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/automated-security-fixes"
},
disablePagesSite: {
headers: {
accept: "application/vnd.github.switcheroo-preview+json"
},
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages"
},
disableVulnerabilityAlerts: {
headers: {
accept: "application/vnd.github.dorian-preview+json"
},
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/vulnerability-alerts"
},
enableAutomatedSecurityFixes: {
headers: {
accept: "application/vnd.github.london-preview+json"
},
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/automated-security-fixes"
},
enablePagesSite: {
headers: {
accept: "application/vnd.github.switcheroo-preview+json"
},
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
source: {
type: "object"
},
"source.branch": {
enum: ["master", "gh-pages"],
type: "string"
},
"source.path": {
type: "string"
}
},
url: "/repos/:owner/:repo/pages"
},
enableVulnerabilityAlerts: {
headers: {
accept: "application/vnd.github.dorian-preview+json"
},
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/vulnerability-alerts"
},
get: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo"
},
getAppsWithAccessToProtectedBranch: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
},
getArchiveLink: {
method: "GET",
params: {
archive_format: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/:archive_format/:ref"
},
getBranch: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch"
},
getBranchProtection: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection"
},
getClones: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
per: {
enum: ["day", "week"],
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/traffic/clones"
},
getCodeFrequencyStats: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stats/code_frequency"
},
getCollaboratorPermissionLevel: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/collaborators/:username/permission"
},
getCombinedStatusForRef: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref/status"
},
getCommit: {
method: "GET",
params: {
commit_sha: {
alias: "ref",
deprecated: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
alias: "ref",
deprecated: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref"
},
getCommitActivityStats: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stats/commit_activity"
},
getCommitComment: {
method: "GET",
params: {
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments/:comment_id"
},
getCommitRefSha: {
deprecated: "octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit",
headers: {
accept: "application/vnd.github.v3.sha"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref"
},
getContents: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
ref: {
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/contents/:path"
},
getContributorsStats: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stats/contributors"
},
getDeployKey: {
method: "GET",
params: {
key_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/keys/:key_id"
},
getDeployment: {
method: "GET",
params: {
deployment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/deployments/:deployment_id"
},
getDeploymentStatus: {
method: "GET",
params: {
deployment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
status_id: {
required: true,
type: "integer"
}
},
url: "/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id"
},
getDownload: {
method: "GET",
params: {
download_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/downloads/:download_id"
},
getHook: {
method: "GET",
params: {
hook_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks/:hook_id"
},
getLatestPagesBuild: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages/builds/latest"
},
getLatestRelease: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/latest"
},
getPages: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages"
},
getPagesBuild: {
method: "GET",
params: {
build_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages/builds/:build_id"
},
getParticipationStats: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stats/participation"
},
getProtectedBranchAdminEnforcement: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
},
getProtectedBranchPullRequestReviewEnforcement: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
},
getProtectedBranchRequiredSignatures: {
headers: {
accept: "application/vnd.github.zzzax-preview+json"
},
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
},
getProtectedBranchRequiredStatusChecks: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
},
getProtectedBranchRestrictions: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions"
},
getPunchCardStats: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/stats/punch_card"
},
getReadme: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
ref: {
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/readme"
},
getRelease: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
release_id: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/:release_id"
},
getReleaseAsset: {
method: "GET",
params: {
asset_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/assets/:asset_id"
},
getReleaseByTag: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
tag: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/tags/:tag"
},
getTeamsWithAccessToProtectedBranch: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
getTopPaths: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/traffic/popular/paths"
},
getTopReferrers: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/traffic/popular/referrers"
},
getUsersWithAccessToProtectedBranch: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
getViews: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
per: {
enum: ["day", "week"],
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/traffic/views"
},
list: {
method: "GET",
params: {
affiliation: {
type: "string"
},
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
sort: {
enum: ["created", "updated", "pushed", "full_name"],
type: "string"
},
type: {
enum: ["all", "owner", "public", "private", "member"],
type: "string"
},
visibility: {
enum: ["all", "public", "private"],
type: "string"
}
},
url: "/user/repos"
},
listAppsWithAccessToProtectedBranch: {
deprecated: "octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)",
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
},
listAssetsForRelease: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
release_id: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/:release_id/assets"
},
listBranches: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
protected: {
type: "boolean"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches"
},
listBranchesForHeadCommit: {
headers: {
accept: "application/vnd.github.groot-preview+json"
},
method: "GET",
params: {
commit_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:commit_sha/branches-where-head"
},
listCollaborators: {
method: "GET",
params: {
affiliation: {
enum: ["outside", "direct", "all"],
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/collaborators"
},
listCommentsForCommit: {
method: "GET",
params: {
commit_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
alias: "commit_sha",
deprecated: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:commit_sha/comments"
},
listCommitComments: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments"
},
listCommits: {
method: "GET",
params: {
author: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
path: {
type: "string"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
},
since: {
type: "string"
},
until: {
type: "string"
}
},
url: "/repos/:owner/:repo/commits"
},
listContributors: {
method: "GET",
params: {
anon: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/contributors"
},
listDeployKeys: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/keys"
},
listDeploymentStatuses: {
method: "GET",
params: {
deployment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/deployments/:deployment_id/statuses"
},
listDeployments: {
method: "GET",
params: {
environment: {
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
},
task: {
type: "string"
}
},
url: "/repos/:owner/:repo/deployments"
},
listDownloads: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/downloads"
},
listForOrg: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
sort: {
enum: ["created", "updated", "pushed", "full_name"],
type: "string"
},
type: {
enum: ["all", "public", "private", "forks", "sources", "member", "internal"],
type: "string"
}
},
url: "/orgs/:org/repos"
},
listForUser: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
sort: {
enum: ["created", "updated", "pushed", "full_name"],
type: "string"
},
type: {
enum: ["all", "owner", "member"],
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/repos"
},
listForks: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
},
sort: {
enum: ["newest", "oldest", "stargazers"],
type: "string"
}
},
url: "/repos/:owner/:repo/forks"
},
listHooks: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks"
},
listInvitations: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/invitations"
},
listInvitationsForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/repository_invitations"
},
listLanguages: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/languages"
},
listPagesBuilds: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages/builds"
},
listProtectedBranchRequiredStatusChecksContexts: {
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
},
listProtectedBranchTeamRestrictions: {
deprecated: "octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)",
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
listProtectedBranchUserRestrictions: {
deprecated: "octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)",
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
listPublic: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "integer"
}
},
url: "/repositories"
},
listPullRequestsAssociatedWithCommit: {
headers: {
accept: "application/vnd.github.groot-preview+json"
},
method: "GET",
params: {
commit_sha: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:commit_sha/pulls"
},
listReleases: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases"
},
listStatusesForRef: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
ref: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/commits/:ref/statuses"
},
listTags: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/tags"
},
listTeams: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/teams"
},
listTeamsWithAccessToProtectedBranch: {
deprecated: "octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)",
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
listTopics: {
headers: {
accept: "application/vnd.github.mercy-preview+json"
},
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/topics"
},
listUsersWithAccessToProtectedBranch: {
deprecated: "octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)",
method: "GET",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
merge: {
method: "POST",
params: {
base: {
required: true,
type: "string"
},
commit_message: {
type: "string"
},
head: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/merges"
},
pingHook: {
method: "POST",
params: {
hook_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks/:hook_id/pings"
},
removeBranchProtection: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection"
},
removeCollaborator: {
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/collaborators/:username"
},
removeDeployKey: {
method: "DELETE",
params: {
key_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/keys/:key_id"
},
removeProtectedBranchAdminEnforcement: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins"
},
removeProtectedBranchAppRestrictions: {
method: "DELETE",
params: {
apps: {
mapTo: "data",
required: true,
type: "string[]"
},
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
},
removeProtectedBranchPullRequestReviewEnforcement: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
},
removeProtectedBranchRequiredSignatures: {
headers: {
accept: "application/vnd.github.zzzax-preview+json"
},
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures"
},
removeProtectedBranchRequiredStatusChecks: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
},
removeProtectedBranchRequiredStatusChecksContexts: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
contexts: {
mapTo: "data",
required: true,
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
},
removeProtectedBranchRestrictions: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions"
},
removeProtectedBranchTeamRestrictions: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
teams: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
removeProtectedBranchUserRestrictions: {
method: "DELETE",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
users: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
replaceProtectedBranchAppRestrictions: {
method: "PUT",
params: {
apps: {
mapTo: "data",
required: true,
type: "string[]"
},
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps"
},
replaceProtectedBranchRequiredStatusChecksContexts: {
method: "PUT",
params: {
branch: {
required: true,
type: "string"
},
contexts: {
mapTo: "data",
required: true,
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts"
},
replaceProtectedBranchTeamRestrictions: {
method: "PUT",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
teams: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams"
},
replaceProtectedBranchUserRestrictions: {
method: "PUT",
params: {
branch: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
users: {
mapTo: "data",
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users"
},
replaceTopics: {
headers: {
accept: "application/vnd.github.mercy-preview+json"
},
method: "PUT",
params: {
names: {
required: true,
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/topics"
},
requestPageBuild: {
method: "POST",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/pages/builds"
},
retrieveCommunityProfileMetrics: {
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/community/profile"
},
testPushHook: {
method: "POST",
params: {
hook_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks/:hook_id/tests"
},
transfer: {
method: "POST",
params: {
new_owner: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_ids: {
type: "integer[]"
}
},
url: "/repos/:owner/:repo/transfer"
},
update: {
method: "PATCH",
params: {
allow_merge_commit: {
type: "boolean"
},
allow_rebase_merge: {
type: "boolean"
},
allow_squash_merge: {
type: "boolean"
},
archived: {
type: "boolean"
},
default_branch: {
type: "string"
},
delete_branch_on_merge: {
type: "boolean"
},
description: {
type: "string"
},
has_issues: {
type: "boolean"
},
has_projects: {
type: "boolean"
},
has_wiki: {
type: "boolean"
},
homepage: {
type: "string"
},
is_template: {
type: "boolean"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
repo: {
required: true,
type: "string"
},
visibility: {
enum: ["public", "private", "visibility", "internal"],
type: "string"
}
},
url: "/repos/:owner/:repo"
},
updateBranchProtection: {
method: "PUT",
params: {
allow_deletions: {
type: "boolean"
},
allow_force_pushes: {
allowNull: true,
type: "boolean"
},
branch: {
required: true,
type: "string"
},
enforce_admins: {
allowNull: true,
required: true,
type: "boolean"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
required_linear_history: {
type: "boolean"
},
required_pull_request_reviews: {
allowNull: true,
required: true,
type: "object"
},
"required_pull_request_reviews.dismiss_stale_reviews": {
type: "boolean"
},
"required_pull_request_reviews.dismissal_restrictions": {
type: "object"
},
"required_pull_request_reviews.dismissal_restrictions.teams": {
type: "string[]"
},
"required_pull_request_reviews.dismissal_restrictions.users": {
type: "string[]"
},
"required_pull_request_reviews.require_code_owner_reviews": {
type: "boolean"
},
"required_pull_request_reviews.required_approving_review_count": {
type: "integer"
},
required_status_checks: {
allowNull: true,
required: true,
type: "object"
},
"required_status_checks.contexts": {
required: true,
type: "string[]"
},
"required_status_checks.strict": {
required: true,
type: "boolean"
},
restrictions: {
allowNull: true,
required: true,
type: "object"
},
"restrictions.apps": {
type: "string[]"
},
"restrictions.teams": {
required: true,
type: "string[]"
},
"restrictions.users": {
required: true,
type: "string[]"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection"
},
updateCommitComment: {
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/comments/:comment_id"
},
updateFile: {
deprecated: "octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)",
method: "PUT",
params: {
author: {
type: "object"
},
"author.email": {
required: true,
type: "string"
},
"author.name": {
required: true,
type: "string"
},
branch: {
type: "string"
},
committer: {
type: "object"
},
"committer.email": {
required: true,
type: "string"
},
"committer.name": {
required: true,
type: "string"
},
content: {
required: true,
type: "string"
},
message: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
path: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
sha: {
type: "string"
}
},
url: "/repos/:owner/:repo/contents/:path"
},
updateHook: {
method: "PATCH",
params: {
active: {
type: "boolean"
},
add_events: {
type: "string[]"
},
config: {
type: "object"
},
"config.content_type": {
type: "string"
},
"config.insecure_ssl": {
type: "string"
},
"config.secret": {
type: "string"
},
"config.url": {
required: true,
type: "string"
},
events: {
type: "string[]"
},
hook_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
remove_events: {
type: "string[]"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/hooks/:hook_id"
},
updateInformationAboutPagesSite: {
method: "PUT",
params: {
cname: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
source: {
enum: ['"gh-pages"', '"master"', '"master /docs"'],
type: "string"
}
},
url: "/repos/:owner/:repo/pages"
},
updateInvitation: {
method: "PATCH",
params: {
invitation_id: {
required: true,
type: "integer"
},
owner: {
required: true,
type: "string"
},
permissions: {
enum: ["read", "write", "admin"],
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/invitations/:invitation_id"
},
updateProtectedBranchPullRequestReviewEnforcement: {
method: "PATCH",
params: {
branch: {
required: true,
type: "string"
},
dismiss_stale_reviews: {
type: "boolean"
},
dismissal_restrictions: {
type: "object"
},
"dismissal_restrictions.teams": {
type: "string[]"
},
"dismissal_restrictions.users": {
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
require_code_owner_reviews: {
type: "boolean"
},
required_approving_review_count: {
type: "integer"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews"
},
updateProtectedBranchRequiredStatusChecks: {
method: "PATCH",
params: {
branch: {
required: true,
type: "string"
},
contexts: {
type: "string[]"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
strict: {
type: "boolean"
}
},
url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks"
},
updateRelease: {
method: "PATCH",
params: {
body: {
type: "string"
},
draft: {
type: "boolean"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
prerelease: {
type: "boolean"
},
release_id: {
required: true,
type: "integer"
},
repo: {
required: true,
type: "string"
},
tag_name: {
type: "string"
},
target_commitish: {
type: "string"
}
},
url: "/repos/:owner/:repo/releases/:release_id"
},
updateReleaseAsset: {
method: "PATCH",
params: {
asset_id: {
required: true,
type: "integer"
},
label: {
type: "string"
},
name: {
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
}
},
url: "/repos/:owner/:repo/releases/assets/:asset_id"
},
uploadReleaseAsset: {
method: "POST",
params: {
data: {
mapTo: "data",
required: true,
type: "string | object"
},
file: {
alias: "data",
deprecated: true,
type: "string | object"
},
headers: {
required: true,
type: "object"
},
"headers.content-length": {
required: true,
type: "integer"
},
"headers.content-type": {
required: true,
type: "string"
},
label: {
type: "string"
},
name: {
required: true,
type: "string"
},
url: {
required: true,
type: "string"
}
},
url: ":url"
}
},
search: {
code: {
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["indexed"],
type: "string"
}
},
url: "/search/code"
},
commits: {
headers: {
accept: "application/vnd.github.cloak-preview+json"
},
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["author-date", "committer-date"],
type: "string"
}
},
url: "/search/commits"
},
issues: {
deprecated: "octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)",
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"],
type: "string"
}
},
url: "/search/issues"
},
issuesAndPullRequests: {
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"],
type: "string"
}
},
url: "/search/issues"
},
labels: {
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
q: {
required: true,
type: "string"
},
repository_id: {
required: true,
type: "integer"
},
sort: {
enum: ["created", "updated"],
type: "string"
}
},
url: "/search/labels"
},
repos: {
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["stars", "forks", "help-wanted-issues", "updated"],
type: "string"
}
},
url: "/search/repositories"
},
topics: {
method: "GET",
params: {
q: {
required: true,
type: "string"
}
},
url: "/search/topics"
},
users: {
method: "GET",
params: {
order: {
enum: ["desc", "asc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
q: {
required: true,
type: "string"
},
sort: {
enum: ["followers", "repositories", "joined"],
type: "string"
}
},
url: "/search/users"
}
},
teams: {
addMember: {
deprecated: "octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)",
method: "PUT",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
addMemberLegacy: {
deprecated: "octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy",
method: "PUT",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
addOrUpdateMembership: {
deprecated: "octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)",
method: "PUT",
params: {
role: {
enum: ["member", "maintainer"],
type: "string"
},
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
addOrUpdateMembershipInOrg: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
role: {
enum: ["member", "maintainer"],
type: "string"
},
team_slug: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/memberships/:username"
},
addOrUpdateMembershipLegacy: {
deprecated: "octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy",
method: "PUT",
params: {
role: {
enum: ["member", "maintainer"],
type: "string"
},
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
addOrUpdateProject: {
deprecated: "octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PUT",
params: {
permission: {
enum: ["read", "write", "admin"],
type: "string"
},
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
addOrUpdateProjectInOrg: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
permission: {
enum: ["read", "write", "admin"],
type: "string"
},
project_id: {
required: true,
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/projects/:project_id"
},
addOrUpdateProjectLegacy: {
deprecated: "octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "PUT",
params: {
permission: {
enum: ["read", "write", "admin"],
type: "string"
},
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
addOrUpdateRepo: {
deprecated: "octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)",
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
addOrUpdateRepoInOrg: {
method: "PUT",
params: {
org: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
repo: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo"
},
addOrUpdateRepoLegacy: {
deprecated: "octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy",
method: "PUT",
params: {
owner: {
required: true,
type: "string"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
checkManagesRepo: {
deprecated: "octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)",
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
checkManagesRepoInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo"
},
checkManagesRepoLegacy: {
deprecated: "octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy",
method: "GET",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
create: {
method: "POST",
params: {
description: {
type: "string"
},
maintainers: {
type: "string[]"
},
name: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
},
parent_team_id: {
type: "integer"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
privacy: {
enum: ["secret", "closed"],
type: "string"
},
repo_names: {
type: "string[]"
}
},
url: "/orgs/:org/teams"
},
createDiscussion: {
deprecated: "octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)",
method: "POST",
params: {
body: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
team_id: {
required: true,
type: "integer"
},
title: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/discussions"
},
createDiscussionComment: {
deprecated: "octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)",
method: "POST",
params: {
body: {
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments"
},
createDiscussionCommentInOrg: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments"
},
createDiscussionCommentLegacy: {
deprecated: "octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy",
method: "POST",
params: {
body: {
required: true,
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments"
},
createDiscussionInOrg: {
method: "POST",
params: {
body: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
team_slug: {
required: true,
type: "string"
},
title: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions"
},
createDiscussionLegacy: {
deprecated: "octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy",
method: "POST",
params: {
body: {
required: true,
type: "string"
},
private: {
type: "boolean"
},
team_id: {
required: true,
type: "integer"
},
title: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/discussions"
},
delete: {
deprecated: "octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
},
deleteDiscussion: {
deprecated: "octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)",
method: "DELETE",
params: {
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
deleteDiscussionComment: {
deprecated: "octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)",
method: "DELETE",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
deleteDiscussionCommentInOrg: {
method: "DELETE",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number"
},
deleteDiscussionCommentLegacy: {
deprecated: "octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy",
method: "DELETE",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
deleteDiscussionInOrg: {
method: "DELETE",
params: {
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number"
},
deleteDiscussionLegacy: {
deprecated: "octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy",
method: "DELETE",
params: {
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
deleteInOrg: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug"
},
deleteLegacy: {
deprecated: "octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
},
get: {
deprecated: "octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
},
getByName: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug"
},
getDiscussion: {
deprecated: "octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)",
method: "GET",
params: {
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
getDiscussionComment: {
deprecated: "octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)",
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
getDiscussionCommentInOrg: {
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number"
},
getDiscussionCommentLegacy: {
deprecated: "octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy",
method: "GET",
params: {
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
getDiscussionInOrg: {
method: "GET",
params: {
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number"
},
getDiscussionLegacy: {
deprecated: "octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy",
method: "GET",
params: {
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
getLegacy: {
deprecated: "octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
},
getMember: {
deprecated: "octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
getMemberLegacy: {
deprecated: "octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
getMembership: {
deprecated: "octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
getMembershipInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/memberships/:username"
},
getMembershipLegacy: {
deprecated: "octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy",
method: "GET",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
list: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/orgs/:org/teams"
},
listChild: {
deprecated: "octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/teams"
},
listChildInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/teams"
},
listChildLegacy: {
deprecated: "octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/teams"
},
listDiscussionComments: {
deprecated: "octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)",
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments"
},
listDiscussionCommentsInOrg: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments"
},
listDiscussionCommentsLegacy: {
deprecated: "octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy",
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments"
},
listDiscussions: {
deprecated: "octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)",
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions"
},
listDiscussionsInOrg: {
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions"
},
listDiscussionsLegacy: {
deprecated: "octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy",
method: "GET",
params: {
direction: {
enum: ["asc", "desc"],
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions"
},
listForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/teams"
},
listMembers: {
deprecated: "octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
role: {
enum: ["member", "maintainer", "all"],
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/members"
},
listMembersInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
role: {
enum: ["member", "maintainer", "all"],
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/members"
},
listMembersLegacy: {
deprecated: "octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
role: {
enum: ["member", "maintainer", "all"],
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/members"
},
listPendingInvitations: {
deprecated: "octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/invitations"
},
listPendingInvitationsInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/invitations"
},
listPendingInvitationsLegacy: {
deprecated: "octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/invitations"
},
listProjects: {
deprecated: "octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects"
},
listProjectsInOrg: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/projects"
},
listProjectsLegacy: {
deprecated: "octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects"
},
listRepos: {
deprecated: "octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos"
},
listReposInOrg: {
method: "GET",
params: {
org: {
required: true,
type: "string"
},
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/repos"
},
listReposLegacy: {
deprecated: "octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy",
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos"
},
removeMember: {
deprecated: "octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
removeMemberLegacy: {
deprecated: "octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/members/:username"
},
removeMembership: {
deprecated: "octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
removeMembershipInOrg: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/memberships/:username"
},
removeMembershipLegacy: {
deprecated: "octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy",
method: "DELETE",
params: {
team_id: {
required: true,
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/teams/:team_id/memberships/:username"
},
removeProject: {
deprecated: "octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)",
method: "DELETE",
params: {
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
removeProjectInOrg: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
project_id: {
required: true,
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/projects/:project_id"
},
removeProjectLegacy: {
deprecated: "octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy",
method: "DELETE",
params: {
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
removeRepo: {
deprecated: "octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)",
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
removeRepoInOrg: {
method: "DELETE",
params: {
org: {
required: true,
type: "string"
},
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo"
},
removeRepoLegacy: {
deprecated: "octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy",
method: "DELETE",
params: {
owner: {
required: true,
type: "string"
},
repo: {
required: true,
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/repos/:owner/:repo"
},
reviewProject: {
deprecated: "octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
reviewProjectInOrg: {
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
org: {
required: true,
type: "string"
},
project_id: {
required: true,
type: "integer"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/projects/:project_id"
},
reviewProjectLegacy: {
deprecated: "octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy",
headers: {
accept: "application/vnd.github.inertia-preview+json"
},
method: "GET",
params: {
project_id: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/projects/:project_id"
},
update: {
deprecated: "octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)",
method: "PATCH",
params: {
description: {
type: "string"
},
name: {
required: true,
type: "string"
},
parent_team_id: {
type: "integer"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
privacy: {
enum: ["secret", "closed"],
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
},
updateDiscussion: {
deprecated: "octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)",
method: "PATCH",
params: {
body: {
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
},
title: {
type: "string"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
updateDiscussionComment: {
deprecated: "octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)",
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
updateDiscussionCommentInOrg: {
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number"
},
updateDiscussionCommentLegacy: {
deprecated: "octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy",
method: "PATCH",
params: {
body: {
required: true,
type: "string"
},
comment_number: {
required: true,
type: "integer"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number"
},
updateDiscussionInOrg: {
method: "PATCH",
params: {
body: {
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
org: {
required: true,
type: "string"
},
team_slug: {
required: true,
type: "string"
},
title: {
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number"
},
updateDiscussionLegacy: {
deprecated: "octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy",
method: "PATCH",
params: {
body: {
type: "string"
},
discussion_number: {
required: true,
type: "integer"
},
team_id: {
required: true,
type: "integer"
},
title: {
type: "string"
}
},
url: "/teams/:team_id/discussions/:discussion_number"
},
updateInOrg: {
method: "PATCH",
params: {
description: {
type: "string"
},
name: {
required: true,
type: "string"
},
org: {
required: true,
type: "string"
},
parent_team_id: {
type: "integer"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
privacy: {
enum: ["secret", "closed"],
type: "string"
},
team_slug: {
required: true,
type: "string"
}
},
url: "/orgs/:org/teams/:team_slug"
},
updateLegacy: {
deprecated: "octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy",
method: "PATCH",
params: {
description: {
type: "string"
},
name: {
required: true,
type: "string"
},
parent_team_id: {
type: "integer"
},
permission: {
enum: ["pull", "push", "admin"],
type: "string"
},
privacy: {
enum: ["secret", "closed"],
type: "string"
},
team_id: {
required: true,
type: "integer"
}
},
url: "/teams/:team_id"
}
},
users: {
addEmails: {
method: "POST",
params: {
emails: {
required: true,
type: "string[]"
}
},
url: "/user/emails"
},
block: {
method: "PUT",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/blocks/:username"
},
checkBlocked: {
method: "GET",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/blocks/:username"
},
checkFollowing: {
method: "GET",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/following/:username"
},
checkFollowingForUser: {
method: "GET",
params: {
target_user: {
required: true,
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/following/:target_user"
},
createGpgKey: {
method: "POST",
params: {
armored_public_key: {
type: "string"
}
},
url: "/user/gpg_keys"
},
createPublicKey: {
method: "POST",
params: {
key: {
type: "string"
},
title: {
type: "string"
}
},
url: "/user/keys"
},
deleteEmails: {
method: "DELETE",
params: {
emails: {
required: true,
type: "string[]"
}
},
url: "/user/emails"
},
deleteGpgKey: {
method: "DELETE",
params: {
gpg_key_id: {
required: true,
type: "integer"
}
},
url: "/user/gpg_keys/:gpg_key_id"
},
deletePublicKey: {
method: "DELETE",
params: {
key_id: {
required: true,
type: "integer"
}
},
url: "/user/keys/:key_id"
},
follow: {
method: "PUT",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/following/:username"
},
getAuthenticated: {
method: "GET",
params: {},
url: "/user"
},
getByUsername: {
method: "GET",
params: {
username: {
required: true,
type: "string"
}
},
url: "/users/:username"
},
getContextForUser: {
method: "GET",
params: {
subject_id: {
type: "string"
},
subject_type: {
enum: ["organization", "repository", "issue", "pull_request"],
type: "string"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/hovercard"
},
getGpgKey: {
method: "GET",
params: {
gpg_key_id: {
required: true,
type: "integer"
}
},
url: "/user/gpg_keys/:gpg_key_id"
},
getPublicKey: {
method: "GET",
params: {
key_id: {
required: true,
type: "integer"
}
},
url: "/user/keys/:key_id"
},
list: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
since: {
type: "string"
}
},
url: "/users"
},
listBlocked: {
method: "GET",
params: {},
url: "/user/blocks"
},
listEmails: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/emails"
},
listFollowersForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/followers"
},
listFollowersForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/followers"
},
listFollowingForAuthenticatedUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/following"
},
listFollowingForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/following"
},
listGpgKeys: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/gpg_keys"
},
listGpgKeysForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/gpg_keys"
},
listPublicEmails: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/public_emails"
},
listPublicKeys: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
}
},
url: "/user/keys"
},
listPublicKeysForUser: {
method: "GET",
params: {
page: {
type: "integer"
},
per_page: {
type: "integer"
},
username: {
required: true,
type: "string"
}
},
url: "/users/:username/keys"
},
togglePrimaryEmailVisibility: {
method: "PATCH",
params: {
email: {
required: true,
type: "string"
},
visibility: {
required: true,
type: "string"
}
},
url: "/user/email/visibility"
},
unblock: {
method: "DELETE",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/blocks/:username"
},
unfollow: {
method: "DELETE",
params: {
username: {
required: true,
type: "string"
}
},
url: "/user/following/:username"
},
updateAuthenticated: {
method: "PATCH",
params: {
bio: {
type: "string"
},
blog: {
type: "string"
},
company: {
type: "string"
},
email: {
type: "string"
},
hireable: {
type: "boolean"
},
location: {
type: "string"
},
name: {
type: "string"
}
},
url: "/user"
}
}
};
2020-06-11 09:37:37 +02:00
const VERSION = "2.4.0";
function registerEndpoints(octokit, routes) {
Object.keys(routes).forEach(namespaceName => {
if (!octokit[namespaceName]) {
octokit[namespaceName] = {};
}
Object.keys(routes[namespaceName]).forEach(apiName => {
const apiOptions = routes[namespaceName][apiName];
const endpointDefaults = ["method", "url", "headers"].reduce((map, key) => {
if (typeof apiOptions[key] !== "undefined") {
map[key] = apiOptions[key];
}
return map;
}, {});
endpointDefaults.request = {
validate: apiOptions.params
};
let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters.
// Not the most elegant solution, but we dont want to move deprecation
// logic into octokit/endpoint.js as its out of scope
const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated);
if (hasDeprecatedParam) {
const patch = patchForDeprecation.bind(null, octokit, apiOptions);
request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`);
request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`);
request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`);
}
if (apiOptions.deprecated) {
octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() {
octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`));
octokit[namespaceName][apiName] = request;
return request.apply(null, arguments);
}, request);
return;
}
octokit[namespaceName][apiName] = request;
});
});
}
function patchForDeprecation(octokit, apiOptions, method, methodName) {
const patchedMethod = options => {
options = Object.assign({}, options);
Object.keys(options).forEach(key => {
if (apiOptions.params[key] && apiOptions.params[key].deprecated) {
const aliasKey = apiOptions.params[key].alias;
octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`));
if (!(aliasKey in options)) {
options[aliasKey] = options[key];
}
delete options[key];
}
});
return method(options);
};
Object.keys(method).forEach(key => {
patchedMethod[key] = method[key];
});
return patchedMethod;
}
/**
* This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary
* goal is to rebuild @octokit/rest on top of @octokit/core. Once that is
* done, we will remove the registerEndpoints methods and return the methods
* directly as with the other plugins. At that point we will also remove the
* legacy workarounds and deprecations.
*
* See the plan at
* https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1
*/
function restEndpointMethods(octokit) {
// @ts-ignore
octokit.registerEndpoints = registerEndpoints.bind(null, octokit);
registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility
// See https://github.com/octokit/rest.js/pull/1134
[["gitdata", "git"], ["authorization", "oauthAuthorizations"], ["pullRequests", "pulls"]].forEach(([deprecatedScope, scope]) => {
Object.defineProperty(octokit, deprecatedScope, {
get() {
octokit.log.warn( // @ts-ignore
new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] "octokit.${deprecatedScope}.*" methods are deprecated, use "octokit.${scope}.*" instead`)); // @ts-ignore
return octokit[scope];
}
});
});
return {};
}
restEndpointMethods.VERSION = VERSION;
exports.restEndpointMethods = restEndpointMethods;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 850:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = paginationMethodsPlugin
function paginationMethodsPlugin (octokit) {
octokit.getFirstPage = __webpack_require__(777).bind(null, octokit)
octokit.getLastPage = __webpack_require__(649).bind(null, octokit)
octokit.getNextPage = __webpack_require__(550).bind(null, octokit)
octokit.getPreviousPage = __webpack_require__(563).bind(null, octokit)
octokit.hasFirstPage = __webpack_require__(536)
octokit.hasLastPage = __webpack_require__(336)
octokit.hasNextPage = __webpack_require__(929)
octokit.hasPreviousPage = __webpack_require__(558)
}
/***/ }),
/***/ 854:
/***/ (function(module) {
/**
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="npm" -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;
/** `Object#toString` result references. */
var funcTag = '[object Function]',
genTag = '[object GeneratorFunction]',
symbolTag = '[object Symbol]';
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
reIsPlainProp = /^\w*$/,
reLeadingDot = /^\./,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue(object, key) {
return object == null ? undefined : object[key];
}
/**
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
function isHostObject(value) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false;
if (value != null && typeof value.toString != 'function') {
try {
result = !!(value + '');
} catch (e) {}
}
return result;
}
/** Used for built-in method references. */
var arrayProto = Array.prototype,
funcProto = Function.prototype,
objectProto = Object.prototype;
/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];
/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
return uid ? ('Symbol(src)_1.' + uid) : '';
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto.toString;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/** Built-in value references. */
var Symbol = root.Symbol,
splice = arrayProto.splice;
/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map'),
nativeCreate = getNative(Object, 'create');
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
symbolToString = symbolProto ? symbolProto.toString : undefined;
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
}
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete(key) {
return this.has(key) && delete this.__data__[key];
}
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined;
}
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
}
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet(key, value) {
var data = this.__data__;
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
return this;
}
// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
}
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
return true;
}
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
return index < 0 ? undefined : data[index][1];
}
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.__data__ = {
'hash': new Hash,
'map': new (Map || ListCache),
'string': new Hash
};
}
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
return getMapData(this, key)['delete'](key);
}
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
getMapData(this, key).set(key, value);
return this;
}
// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
return -1;
}
/**
* The base implementation of `_.get` without support for default values.
*
* @private
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @returns {*} Returns the resolved value.
*/
function baseGet(object, path) {
path = isKey(path, object) ? [path] : castPath(path);
var index = 0,
length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return (index && index == length) ? object : undefined;
}
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) {
return false;
}
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString(value) {
// Exit early for strings to avoid a performance hit in some environments.
if (typeof value == 'string') {
return value;
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : '';
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @returns {Array} Returns the cast property path array.
*/
function castPath(value) {
return isArray(value) ? value : stringToPath(value);
}
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key)
? data[typeof key == 'string' ? 'string' : 'hash']
: data.map;
}
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined;
}
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey(value, object) {
if (isArray(value)) {
return false;
}
var type = typeof value;
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
(object != null && value in Object(object));
}
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
? (value !== '__proto__')
: (value === null);
}
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && (maskSrcKey in func);
}
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoize(function(string) {
string = toString(string);
var result = [];
if (reLeadingDot.test(string)) {
result.push('');
}
string.replace(rePropName, function(match, number, quote, string) {
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
});
return result;
});
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey(value) {
if (typeof value == 'string' || isSymbol(value)) {
return value;
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return (func + '');
} catch (e) {}
}
return '';
}
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize(func, resolver) {
if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
throw new TypeError(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments,
key = resolver ? resolver.apply(this, args) : args[0],
cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result = func.apply(this, args);
memoized.cache = cache.set(key, result);
return result;
};
memoized.cache = new (memoize.Cache || MapCache);
return memoized;
}
// Assign cache to `_.memoize`.
memoize.Cache = MapCache;
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || (value !== value && other !== other);
}
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject(value) ? objectToString.call(value) : '';
return tag == funcTag || tag == genTag;
}
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return !!value && (type == 'object' || type == 'function');
}
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return !!value && typeof value == 'object';
}
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol(value) {
return typeof value == 'symbol' ||
(isObjectLike(value) && objectToString.call(value) == symbolTag);
}
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {string} Returns the string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString(value) {
return value == null ? '' : baseToString(value);
}
/**
* Gets the value at `path` of `object`. If the resolved value is
* `undefined`, the `defaultValue` is returned in its place.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
* @param {Object} object The object to query.
* @param {Array|string} path The path of the property to get.
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
* @returns {*} Returns the resolved value.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
* _.get(object, 'a[0].b.c');
* // => 3
*
* _.get(object, ['a', '0', 'b', 'c']);
* // => 3
*
* _.get(object, 'a.b.c', 'default');
* // => 'default'
*/
function get(object, path, defaultValue) {
var result = object == null ? undefined : baseGet(object, path);
return result === undefined ? defaultValue : result;
}
module.exports = get;
/***/ }),
/***/ 855:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = registerPlugin;
const factory = __webpack_require__(47);
function registerPlugin(plugins, pluginFunction) {
return factory(
plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction)
);
}
/***/ }),
/***/ 856:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = __webpack_require__(141);
/***/ }),
/***/ 861:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const {Transform, PassThrough} = __webpack_require__(413);
const zlib = __webpack_require__(761);
const mimicResponse = __webpack_require__(89);
module.exports = response => {
const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();
if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
return response;
}
// TODO: Remove this when targeting Node.js 12.
const isBrotli = contentEncoding === 'br';
if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {
response.destroy(new Error('Brotli is not supported on Node.js < 12'));
return response;
}
let isEmpty = true;
const checker = new Transform({
transform(data, _encoding, callback) {
isEmpty = false;
callback(null, data);
},
flush(callback) {
callback();
}
});
const finalStream = new PassThrough({
autoDestroy: false,
destroy(error, callback) {
response.destroy();
callback(error);
}
});
const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();
decompressStream.once('error', error => {
if (isEmpty && !response.readable) {
finalStream.end();
return;
}
finalStream.destroy(error);
});
mimicResponse(response, finalStream);
response.pipe(checker).pipe(decompressStream).pipe(finalStream);
return finalStream;
};
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 863:
/***/ (function(module, __unusedexports, __webpack_require__) {
module.exports = authenticationBeforeRequest;
const btoa = __webpack_require__(675);
const withAuthorizationPrefix = __webpack_require__(143);
function authenticationBeforeRequest(state, options) {
if (typeof state.auth === "string") {
options.headers.authorization = withAuthorizationPrefix(state.auth);
return;
}
if (state.auth.username) {
const hash = btoa(`${state.auth.username}:${state.auth.password}`);
options.headers.authorization = `Basic ${hash}`;
if (state.otp) {
options.headers["x-github-otp"] = state.otp;
}
2020-06-11 09:37:37 +02:00
return;
}
2020-06-11 09:37:37 +02:00
if (state.auth.clientId) {
// There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as
// Basic Authorization instead of query parameters. The only routes where that applies share the same
// URL though: `/applications/:client_id/tokens/:access_token`.
//
// 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization)
// 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization)
// 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application)
//
// We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token"
// as well as "/applications/123/tokens/token456"
if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) {
const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`);
options.headers.authorization = `Basic ${hash}`;
return;
}
2020-06-11 09:37:37 +02:00
options.url += options.url.indexOf("?") === -1 ? "?" : "&";
options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`;
return;
}
return Promise.resolve()
.then(() => {
return state.auth();
})
.then(authorization => {
options.headers.authorization = withAuthorizationPrefix(authorization);
});
}
/***/ }),
/***/ 866:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
var shebangRegex = __webpack_require__(816);
module.exports = function (str) {
var match = str.match(shebangRegex);
if (!match) {
return null;
}
2020-06-11 09:37:37 +02:00
var arr = match[0].replace(/#! ?/, '').split(' ');
var bin = arr[0].split('/').pop();
var arg = arr[1];
2020-06-11 09:37:37 +02:00
return (bin === 'env' ?
arg :
bin + (arg ? ' ' + arg : '')
);
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 872:
/***/ (function(__unusedmodule, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
const { context } = __webpack_require__(469);
const core = __webpack_require__(470);
const get = __webpack_require__(854);
const got = __webpack_require__(77);
const isValidCommitMessage = (message) => message.match(/^[a-z].*:/);
const extractCommits = () => __awaiter(this, void 0, void 0, function* () {
// For "push" events, commits can be found in the "context.payload.commits".
const pushCommits = Array.isArray(get(context, "payload.commits"));
if (pushCommits) {
return context.payload.commits;
}
// For PRs, we need to get a list of commits via the GH API:
const prCommitsUrl = typeof get(context, "payload.pull_request.commits_url");
if (prCommitsUrl) {
try {
const { body } = yield got.get(prCommitsUrl, {
responseType: "json",
});
if (Array.isArray(body)) {
return body.map((item) => item.commit);
}
return [];
}
catch (_a) {
return [];
}
}
return [];
});
function run() {
return __awaiter(this, void 0, void 0, function* () {
core.info(` Checking if commit messages are following the Conventional Commits specification...`);
const extractedCommits = yield extractCommits();
if (extractedCommits.length === 0) {
core.info(`No commits to check, skipping...`);
return;
}
let hasErrors;
core.startGroup("Commit messages:");
for (let i = 0; i < extractedCommits.length; i++) {
let commit = extractedCommits[i];
if (isValidCommitMessage(commit.message)) {
core.info(`${commit.message}`);
}
else {
core.info(`🚩 ${commit.message}`);
hasErrors = true;
}
}
core.endGroup();
if (hasErrors) {
core.setFailed(`🚫 According to the conventional-commits specification, some of the commit messages are not valid.`);
}
else {
core.info("🎉 All commit messages are following the Conventional Commits specification.");
}
});
}
2020-06-11 09:37:37 +02:00
run();
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 881:
/***/ (function(module) {
2020-06-11 09:37:37 +02:00
"use strict";
const isWin = process.platform === 'win32';
2020-06-11 09:37:37 +02:00
function notFoundError(original, syscall) {
return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
code: 'ENOENT',
errno: 'ENOENT',
syscall: `${syscall} ${original.command}`,
path: original.command,
spawnargs: original.args,
});
}
2020-06-11 09:37:37 +02:00
function hookChildProcess(cp, parsed) {
if (!isWin) {
return;
}
2020-06-11 09:37:37 +02:00
const originalEmit = cp.emit;
2020-06-11 09:37:37 +02:00
cp.emit = function (name, arg1) {
// If emitting "exit" event and exit code is 1, we need to check if
// the command exists and emit an "error" instead
// See https://github.com/IndigoUnited/node-cross-spawn/issues/16
if (name === 'exit') {
const err = verifyENOENT(arg1, parsed, 'spawn');
2020-06-11 09:37:37 +02:00
if (err) {
return originalEmit.call(cp, 'error', err);
}
}
2020-06-11 09:37:37 +02:00
return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params
};
}
2020-06-11 09:37:37 +02:00
function verifyENOENT(status, parsed) {
if (isWin && status === 1 && !parsed.file) {
return notFoundError(parsed.original, 'spawn');
}
return null;
}
function verifyENOENTSync(status, parsed) {
if (isWin && status === 1 && !parsed.file) {
return notFoundError(parsed.original, 'spawnSync');
}
return null;
}
2020-06-11 09:37:37 +02:00
module.exports = {
hookChildProcess,
verifyENOENT,
verifyENOENTSync,
notFoundError,
};
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 883:
/***/ (function(module) {
/**
* lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="npm" -o ./`
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*/
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used as references for various `Number` constants. */
2020-06-11 09:37:37 +02:00
var INFINITY = 1 / 0,
MAX_SAFE_INTEGER = 9007199254740991;
/** `Object#toString` result references. */
var funcTag = '[object Function]',
genTag = '[object GeneratorFunction]',
symbolTag = '[object Symbol]';
/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
reIsPlainProp = /^\w*$/,
reLeadingDot = /^\./,
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
2020-06-11 09:37:37 +02:00
/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue(object, key) {
return object == null ? undefined : object[key];
}
/**
* Checks if `value` is a host object in IE < 9.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a host object, else `false`.
*/
function isHostObject(value) {
// Many host objects are `Object` objects that can coerce to strings
// despite having improperly defined `toString` methods.
var result = false;
if (value != null && typeof value.toString != 'function') {
try {
result = !!(value + '');
} catch (e) {}
}
return result;
}
/** Used for built-in method references. */
var arrayProto = Array.prototype,
funcProto = Function.prototype,
objectProto = Object.prototype;
/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];
/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
return uid ? ('Symbol(src)_1.' + uid) : '';
}());
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto.toString;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/** Built-in value references. */
var Symbol = root.Symbol,
splice = arrayProto.splice;
/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map'),
nativeCreate = getNative(Object, 'create');
/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
symbolToString = symbolProto ? symbolProto.toString : undefined;
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
}
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete(key) {
return this.has(key) && delete this.__data__[key];
}
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty.call(data, key) ? data[key] : undefined;
}
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
}
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet(key, value) {
var data = this.__data__;
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
return this;
}
// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
}
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
return true;
}
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__,
index = assocIndexOf(data, key);
return index < 0 ? undefined : data[index][1];
}
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__,
index = assocIndexOf(data, key);
if (index < 0) {
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var index = -1,
length = entries ? entries.length : 0;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.__data__ = {
'hash': new Hash,
'map': new (Map || ListCache),
'string': new Hash
};
}
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
return getMapData(this, key)['delete'](key);
}
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
getMapData(this, key).set(key, value);
return this;
}
// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
2020-06-11 09:37:37 +02:00
/**
* Assigns `value` to `key` of `object` if the existing value is not equivalent
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function assignValue(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
(value === undefined && !(key in object))) {
object[key] = value;
}
}
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
return -1;
}
/**
2020-06-11 09:37:37 +02:00
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
2020-06-11 09:37:37 +02:00
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
2020-06-11 09:37:37 +02:00
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) {
return false;
}
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
/**
* The base implementation of `_.set`.
*
* @private
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @param {Function} [customizer] The function to customize path creation.
* @returns {Object} Returns `object`.
*/
function baseSet(object, path, value, customizer) {
if (!isObject(object)) {
return object;
}
path = isKey(path, object) ? [path] : castPath(path);
2020-06-11 09:37:37 +02:00
var index = -1,
length = path.length,
lastIndex = length - 1,
nested = object;
2020-06-11 09:37:37 +02:00
while (nested != null && ++index < length) {
var key = toKey(path[index]),
newValue = value;
2020-06-11 09:37:37 +02:00
if (index != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : undefined;
if (newValue === undefined) {
newValue = isObject(objValue)
? objValue
: (isIndex(path[index + 1]) ? [] : {});
}
}
assignValue(nested, key, newValue);
nested = nested[key];
}
2020-06-11 09:37:37 +02:00
return object;
}
/**
* The base implementation of `_.toString` which doesn't convert nullish
* values to empty strings.
*
* @private
* @param {*} value The value to process.
* @returns {string} Returns the string.
*/
function baseToString(value) {
// Exit early for strings to avoid a performance hit in some environments.
if (typeof value == 'string') {
return value;
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : '';
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
/**
* Casts `value` to a path array if it's not one.
*
* @private
* @param {*} value The value to inspect.
* @returns {Array} Returns the cast property path array.
*/
function castPath(value) {
return isArray(value) ? value : stringToPath(value);
}
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key)
? data[typeof key == 'string' ? 'string' : 'hash']
: data.map;
}
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined;
}
2020-06-11 09:37:37 +02:00
/**
* Checks if `value` is a valid array-like index.
*
* @private
* @param {*} value The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
*/
function isIndex(value, length) {
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length &&
(typeof value == 'number' || reIsUint.test(value)) &&
(value > -1 && value % 1 == 0 && value < length);
}
/**
* Checks if `value` is a property name and not a property path.
*
* @private
* @param {*} value The value to check.
* @param {Object} [object] The object to query keys on.
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
*/
function isKey(value, object) {
if (isArray(value)) {
return false;
}
var type = typeof value;
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
(object != null && value in Object(object));
}
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
? (value !== '__proto__')
: (value === null);
}
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && (maskSrcKey in func);
}
/**
* Converts `string` to a property path array.
*
* @private
* @param {string} string The string to convert.
* @returns {Array} Returns the property path array.
*/
var stringToPath = memoize(function(string) {
string = toString(string);
var result = [];
if (reLeadingDot.test(string)) {
result.push('');
}
string.replace(rePropName, function(match, number, quote, string) {
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
});
return result;
});
/**
* Converts `value` to a string key if it's not a string or symbol.
*
* @private
* @param {*} value The value to inspect.
* @returns {string|symbol} Returns the key.
*/
function toKey(value) {
if (typeof value == 'string' || isSymbol(value)) {
return value;
}
var result = (value + '');
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to process.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return (func + '');
} catch (e) {}
}
return '';
}
/**
* Creates a function that memoizes the result of `func`. If `resolver` is
* provided, it determines the cache key for storing the result based on the
* arguments provided to the memoized function. By default, the first argument
* provided to the memoized function is used as the map cache key. The `func`
* is invoked with the `this` binding of the memoized function.
*
* **Note:** The cache is exposed as the `cache` property on the memoized
* function. Its creation may be customized by replacing the `_.memoize.Cache`
* constructor with one whose instances implement the
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
* method interface of `delete`, `get`, `has`, and `set`.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Function
* @param {Function} func The function to have its output memoized.
* @param {Function} [resolver] The function to resolve the cache key.
* @returns {Function} Returns the new memoized function.
* @example
*
* var object = { 'a': 1, 'b': 2 };
* var other = { 'c': 3, 'd': 4 };
*
* var values = _.memoize(_.values);
* values(object);
* // => [1, 2]
*
* values(other);
* // => [3, 4]
*
* object.a = 2;
* values(object);
* // => [1, 2]
*
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize(func, resolver) {
if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
throw new TypeError(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments,
key = resolver ? resolver.apply(this, args) : args[0],
cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result = func.apply(this, args);
memoized.cache = cache.set(key, result);
return result;
};
memoized.cache = new (memoize.Cache || MapCache);
return memoized;
}
// Assign cache to `_.memoize`.
memoize.Cache = MapCache;
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || (value !== value && other !== other);
}
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 8-9 which returns 'object' for typed array and other constructors.
var tag = isObject(value) ? objectToString.call(value) : '';
return tag == funcTag || tag == genTag;
}
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return !!value && (type == 'object' || type == 'function');
}
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return !!value && typeof value == 'object';
}
/**
* Checks if `value` is classified as a `Symbol` primitive or object.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
* @example
*
* _.isSymbol(Symbol.iterator);
* // => true
*
* _.isSymbol('abc');
* // => false
*/
function isSymbol(value) {
return typeof value == 'symbol' ||
(isObjectLike(value) && objectToString.call(value) == symbolTag);
}
/**
* Converts `value` to a string. An empty string is returned for `null`
* and `undefined` values. The sign of `-0` is preserved.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to process.
* @returns {string} Returns the string.
* @example
*
* _.toString(null);
* // => ''
*
* _.toString(-0);
* // => '-0'
*
* _.toString([1, 2, 3]);
* // => '1,2,3'
*/
function toString(value) {
return value == null ? '' : baseToString(value);
}
/**
2020-06-11 09:37:37 +02:00
* Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
* it's created. Arrays are created for missing index properties while objects
* are created for all other missing properties. Use `_.setWith` to customize
* `path` creation.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @since 3.7.0
* @category Object
2020-06-11 09:37:37 +02:00
* @param {Object} object The object to modify.
* @param {Array|string} path The path of the property to set.
* @param {*} value The value to set.
* @returns {Object} Returns `object`.
* @example
*
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
*
2020-06-11 09:37:37 +02:00
* _.set(object, 'a[0].b.c', 4);
* console.log(object.a[0].b.c);
* // => 4
*
2020-06-11 09:37:37 +02:00
* _.set(object, ['x', '0', 'y', 'z'], 5);
* console.log(object.x[0].y.z);
* // => 5
*/
2020-06-11 09:37:37 +02:00
function set(object, path, value) {
return object == null ? object : baseSet(object, path, value);
}
2020-06-11 09:37:37 +02:00
module.exports = set;
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 898:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, '__esModule', { value: true });
2020-06-11 09:37:37 +02:00
var request = __webpack_require__(753);
var universalUserAgent = __webpack_require__(796);
2020-06-11 09:37:37 +02:00
const VERSION = "4.5.1";
2020-06-11 09:37:37 +02:00
class GraphqlError extends Error {
constructor(request, response) {
const message = response.data.errors[0].message;
super(message);
Object.assign(this, response.data);
this.name = "GraphqlError";
this.request = request; // Maintains proper stack trace (only available on V8)
2020-06-11 09:37:37 +02:00
/* istanbul ignore next */
2020-06-11 09:37:37 +02:00
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
}
2020-06-11 09:37:37 +02:00
const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"];
function graphql(request, query, options) {
options = typeof query === "string" ? options = Object.assign({
query
}, options) : options = query;
const requestOptions = Object.keys(options).reduce((result, key) => {
if (NON_VARIABLE_OPTIONS.includes(key)) {
result[key] = options[key];
return result;
}
2020-06-11 09:37:37 +02:00
if (!result.variables) {
result.variables = {};
}
2020-06-11 09:37:37 +02:00
result.variables[key] = options[key];
return result;
}, {});
return request(requestOptions).then(response => {
if (response.data.errors) {
throw new GraphqlError(requestOptions, {
data: response.data
});
}
2020-06-11 09:37:37 +02:00
return response.data.data;
});
}
2020-06-11 09:37:37 +02:00
function withDefaults(request$1, newDefaults) {
const newRequest = request$1.defaults(newDefaults);
const newApi = (query, options) => {
return graphql(newRequest, query, options);
};
2020-06-11 09:37:37 +02:00
return Object.assign(newApi, {
defaults: withDefaults.bind(null, newRequest),
endpoint: request.request.endpoint
});
}
2020-06-11 09:37:37 +02:00
const graphql$1 = withDefaults(request.request, {
headers: {
"user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`
},
method: "POST",
url: "/graphql"
});
function withCustomRequest(customRequest) {
return withDefaults(customRequest, {
method: "POST",
url: "/graphql"
});
}
2020-06-11 09:37:37 +02:00
exports.graphql = graphql$1;
exports.withCustomRequest = withCustomRequest;
//# sourceMappingURL=index.js.map
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 899:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
2020-06-11 09:37:37 +02:00
const EventEmitter = __webpack_require__(614);
const tls = __webpack_require__(16);
const http2 = __webpack_require__(565);
const QuickLRU = __webpack_require__(290);
const kCurrentStreamsCount = Symbol('currentStreamsCount');
const kRequest = Symbol('request');
const kOriginSet = Symbol('cachedOriginSet');
const nameKeys = [
// `http2.connect()` options
'maxDeflateDynamicTableSize',
'maxSessionMemory',
'maxHeaderListPairs',
'maxOutstandingPings',
'maxReservedRemoteStreams',
'maxSendHeaderBlockLength',
'paddingStrategy',
// `tls.connect()` options
'localAddress',
'path',
'rejectUnauthorized',
'minDHSize',
// `tls.createSecureContext()` options
'ca',
'cert',
'clientCertEngine',
'ciphers',
'key',
'pfx',
'servername',
'minVersion',
'maxVersion',
'secureProtocol',
'crl',
'honorCipherOrder',
'ecdhCurve',
'dhparam',
'secureOptions',
'sessionIdContext'
];
2020-06-11 09:37:37 +02:00
const removeSession = (where, name, session) => {
if (name in where) {
const index = where[name].indexOf(session);
2020-06-11 09:37:37 +02:00
if (index !== -1) {
where[name].splice(index, 1);
2020-06-11 09:37:37 +02:00
if (where[name].length === 0) {
delete where[name];
}
2020-06-11 09:37:37 +02:00
return true;
}
}
2020-06-11 09:37:37 +02:00
return false;
};
2020-06-11 09:37:37 +02:00
const addSession = (where, name, session) => {
if (name in where) {
where[name].push(session);
} else {
where[name] = [session];
}
};
2020-06-11 09:37:37 +02:00
const getSessions = (where, name, normalizedOrigin) => {
if (!(name in where)) {
return [];
}
2020-06-11 09:37:37 +02:00
return where[name].filter(session => {
return !session.closed && !session.destroyed && session[kOriginSet].includes(normalizedOrigin);
});
};
2020-06-11 09:37:37 +02:00
// See https://tools.ietf.org/html/rfc8336
const closeCoveredSessions = (where, name, session) => {
if (!(name in where)) {
return;
}
2020-06-11 09:37:37 +02:00
// Clients SHOULD NOT emit new requests on any connection whose Origin
// Set is a proper subset of another connection's Origin Set, and they
// SHOULD close it once all outstanding requests are satisfied.
for (const coveredSession of where[name]) {
if (
// The set is a proper subset when its length is less than the other set.
coveredSession[kOriginSet].length < session[kOriginSet].length &&
// And the other set includes all elements of the subset.
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
// Makes sure that the session can handle all requests from the covered session.
// TODO: can the session become uncovered when a stream is closed after checking this condition?
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
) {
// This allows pending requests to finish and prevents making new requests.
coveredSession.close();
}
}
};
2020-06-11 09:37:37 +02:00
// This is basically inverted `closeCoveredSessions(...)`.
const closeSessionIfCovered = (where, name, coveredSession) => {
if (!(name in where)) {
return;
}
2020-06-11 09:37:37 +02:00
for (const session of where[name]) {
if (
coveredSession[kOriginSet].length < session[kOriginSet].length &&
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
) {
coveredSession.close();
}
}
};
2020-06-11 09:37:37 +02:00
class Agent extends EventEmitter {
constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 1, maxCachedTlsSessions = 100} = {}) {
super();
// A session is considered busy when its current streams count
// is equal to or greater than the `maxConcurrentStreams` value.
this.busySessions = {};
// A session is considered free when its current streams count
// is less than the `maxConcurrentStreams` value.
this.freeSessions = {};
// The queue for creating new sessions. It looks like this:
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
//
// The entry function has `listeners`, `completed` and `destroyed` properties.
// `listeners` is an array of objects containing `resolve` and `reject` functions.
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.
this.queue = {};
// Each session will use this timeout value.
this.timeout = timeout;
// Max sessions per origin.
this.maxSessions = maxSessions;
// Max free sessions per origin.
// TODO: decreasing `maxFreeSessions` should close some sessions
// TODO: should `maxFreeSessions` be related only to sessions with 0 pending streams?
this.maxFreeSessions = maxFreeSessions;
// We don't support push streams by default.
this.settings = {
enablePush: false
};
2020-06-11 09:37:37 +02:00
// Reusing TLS sessions increases performance.
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
}
2020-06-11 09:37:37 +02:00
static normalizeOrigin(url, servername) {
if (typeof url === 'string') {
url = new URL(url);
}
2020-06-11 09:37:37 +02:00
if (servername && url.hostname !== servername) {
url.hostname = servername;
}
2020-06-11 09:37:37 +02:00
return url.origin;
}
2020-06-11 09:37:37 +02:00
normalizeOptions(options) {
let normalized = '';
2020-06-11 09:37:37 +02:00
if (options) {
for (const key of nameKeys) {
if (options[key]) {
normalized += `:${options[key]}`;
}
}
}
2020-06-11 09:37:37 +02:00
return normalized;
}
2020-06-11 09:37:37 +02:00
_tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
return;
}
2020-06-11 09:37:37 +02:00
// We need the busy sessions length to check if a session can be created.
const busyLength = getSessions(this.busySessions, normalizedOptions, normalizedOrigin).length;
const item = this.queue[normalizedOptions][normalizedOrigin];
2020-06-11 09:37:37 +02:00
// The entry function can be run only once.
if (busyLength < this.maxSessions && !item.completed) {
item.completed = true;
2020-06-11 09:37:37 +02:00
item();
}
}
2020-06-11 09:37:37 +02:00
_closeCoveredSessions(normalizedOptions, session) {
closeCoveredSessions(this.freeSessions, normalizedOptions, session);
closeCoveredSessions(this.busySessions, normalizedOptions, session);
}
2020-06-11 09:37:37 +02:00
getSession(origin, options, listeners) {
return new Promise((resolve, reject) => {
if (Array.isArray(listeners)) {
listeners = [...listeners];
2020-06-11 09:37:37 +02:00
// Resolve the current promise ASAP, we're just moving the listeners.
// They will be executed at a different time.
resolve();
} else {
listeners = [{resolve, reject}];
}
2020-06-11 09:37:37 +02:00
const normalizedOptions = this.normalizeOptions(options);
const normalizedOrigin = Agent.normalizeOrigin(origin, options && options.servername);
2020-06-11 09:37:37 +02:00
if (normalizedOrigin === undefined) {
for (const {reject} of listeners) {
reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
}
2020-06-11 09:37:37 +02:00
return;
}
2020-06-11 09:37:37 +02:00
if (normalizedOptions in this.freeSessions) {
// Look for all available free sessions.
const freeSessions = getSessions(this.freeSessions, normalizedOptions, normalizedOrigin);
if (freeSessions.length !== 0) {
// Use session which has the biggest stream capacity in order to use the smallest number of sessions possible.
const session = freeSessions.reduce((previousSession, nextSession) => {
if (
nextSession.remoteSettings.maxConcurrentStreams >= previousSession.remoteSettings.maxConcurrentStreams &&
nextSession[kCurrentStreamsCount] > previousSession[kCurrentStreamsCount]
) {
return nextSession;
}
2020-06-11 09:37:37 +02:00
return previousSession;
});
2020-06-11 09:37:37 +02:00
for (const {resolve} of listeners) {
// TODO: The session can get busy here
resolve(session);
}
2020-06-11 09:37:37 +02:00
return;
}
}
2020-06-11 09:37:37 +02:00
if (normalizedOptions in this.queue) {
if (normalizedOrigin in this.queue[normalizedOptions]) {
// There's already an item in the queue, just attach ourselves to it.
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
2020-06-11 09:37:37 +02:00
return;
}
} else {
this.queue[normalizedOptions] = {};
}
2020-06-11 09:37:37 +02:00
// The entry must be removed from the queue IMMEDIATELY when:
// 1. the session connects successfully,
// 2. an error occurs.
const removeFromQueue = () => {
// Our entry can be replaced. We cannot remove the new one.
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
delete this.queue[normalizedOptions][normalizedOrigin];
2020-06-11 09:37:37 +02:00
if (Object.keys(this.queue[normalizedOptions]).length === 0) {
delete this.queue[normalizedOptions];
}
}
};
2020-06-11 09:37:37 +02:00
// The main logic is here
const entry = () => {
const name = `${normalizedOrigin}:${normalizedOptions}`;
let receivedSettings = false;
let servername;
try {
const tlsSessionCache = this.tlsSessionCache.get(name);
const session = http2.connect(origin, {
createConnection: this.createConnection,
settings: this.settings,
session: tlsSessionCache ? tlsSessionCache.session : undefined,
...options
});
session[kCurrentStreamsCount] = 0;
// Tries to free the session.
const freeSession = () => {
// Fetch the smallest amount of free sessions of any origin we have.
const freeSessionsCount = session[kOriginSet].reduce((accumulator, origin) => {
return Math.min(accumulator, getSessions(this.freeSessions, normalizedOptions, origin).length);
}, Infinity);
// Check the limit.
if (freeSessionsCount < this.maxFreeSessions) {
addSession(this.freeSessions, normalizedOptions, session);
return true;
}
2020-06-11 09:37:37 +02:00
return false;
};
2020-06-11 09:37:37 +02:00
const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
2020-06-11 09:37:37 +02:00
session.socket.once('session', tlsSession => {
// We need to cache the servername due to a bug in OpenSSL.
setImmediate(() => {
this.tlsSessionCache.set(name, {
session: tlsSession,
servername
});
});
});
2020-06-11 09:37:37 +02:00
// OpenSSL bug workaround.
// See https://github.com/nodejs/node/issues/28985
session.socket.once('secureConnect', () => {
servername = session.socket.servername;
2020-06-11 09:37:37 +02:00
if (servername === false && typeof tlsSessionCache !== 'undefined' && typeof tlsSessionCache.servername !== 'undefined') {
session.socket.servername = tlsSessionCache.servername;
}
});
2020-06-11 09:37:37 +02:00
session.once('error', error => {
// `receivedSettings` is true when the session has successfully connected.
if (!receivedSettings) {
for (const {reject} of listeners) {
reject(error);
}
}
2020-06-11 09:37:37 +02:00
// The connection got broken, purge the cache.
this.tlsSessionCache.delete(name);
});
2020-06-11 09:37:37 +02:00
session.setTimeout(this.timeout, () => {
// Terminates all streams owned by this session.
session.destroy();
});
2020-06-11 09:37:37 +02:00
session.once('close', () => {
if (!receivedSettings) {
// Broken connection
const error = new Error('Session closed without receiving a SETTINGS frame');
2020-06-11 09:37:37 +02:00
for (const {reject} of listeners) {
reject(error);
}
}
2020-06-11 09:37:37 +02:00
removeFromQueue();
2020-06-11 09:37:37 +02:00
// This cannot be moved to the stream logic,
// because there may be a session that hadn't made a single request.
removeSession(this.freeSessions, normalizedOptions, session);
2020-06-11 09:37:37 +02:00
// There may be another session awaiting.
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
});
2020-06-11 09:37:37 +02:00
// Iterates over the queue and processes listeners.
const processListeners = () => {
if (!(normalizedOptions in this.queue)) {
return;
}
2020-06-11 09:37:37 +02:00
for (const origin of session[kOriginSet]) {
if (origin in this.queue[normalizedOptions]) {
const {listeners} = this.queue[normalizedOptions][origin];
// Prevents session overloading.
while (listeners.length !== 0 && isFree()) {
// We assume `resolve(...)` calls `request(...)` *directly*,
// otherwise the session will get overloaded.
listeners.shift().resolve(session);
}
if (this.queue[normalizedOptions][origin].listeners.length === 0) {
delete this.queue[normalizedOptions][origin];
if (Object.keys(this.queue[normalizedOptions]).length === 0) {
delete this.queue[normalizedOptions];
break;
}
}
// We're no longer free, no point in continuing.
if (!isFree()) {
break;
}
}
}
};
2020-06-11 09:37:37 +02:00
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
session.once('origin', () => {
session[kOriginSet] = session.originSet;
2020-06-11 09:37:37 +02:00
if (!isFree()) {
// The session is full.
return;
}
2020-06-11 09:37:37 +02:00
// Close covered sessions (if possible).
this._closeCoveredSessions(normalizedOptions, session);
2020-06-11 09:37:37 +02:00
processListeners();
2020-06-11 09:37:37 +02:00
// `session.remoteSettings.maxConcurrentStreams` might get increased
session.on('remoteSettings', () => {
this._closeCoveredSessions(normalizedOptions, session);
});
});
2020-06-11 09:37:37 +02:00
session.once('remoteSettings', () => {
// The Agent could have been destroyed already.
if (entry.destroyed) {
const error = new Error('Agent has been destroyed');
for (const listener of listeners) {
listener.reject(error);
}
session.destroy();
return;
}
session[kOriginSet] = session.originSet;
this.emit('session', session);
if (freeSession()) {
// Process listeners, we're free.
processListeners();
} else if (this.maxFreeSessions === 0) {
processListeners();
// We're closing ASAP, when all possible requests have been made for this event loop tick.
setImmediate(() => {
session.close();
});
} else {
// Too late, another free session took these listeners.
session.close();
}
removeFromQueue();
// Check if we haven't managed to execute all listeners.
if (listeners.length !== 0) {
// Request for a new session with predefined listeners.
this.getSession(normalizedOrigin, options, listeners);
listeners.length = 0;
}
receivedSettings = true;
// `session.remoteSettings.maxConcurrentStreams` might get increased
session.on('remoteSettings', () => {
// Check if we're eligible to become a free session
if (isFree() && removeSession(this.busySessions, normalizedOptions, session)) {
// Check for free seats
if (freeSession()) {
processListeners();
} else {
// Assume it's still a busy session
addSession(this.busySessions, normalizedOptions, session);
}
}
});
});
2020-06-11 09:37:37 +02:00
// Shim `session.request()` in order to catch all streams
session[kRequest] = session.request;
session.request = headers => {
const stream = session[kRequest](headers, {
endStream: false
});
2020-06-11 09:37:37 +02:00
// The process won't exit until the session is closed.
session.ref();
2020-06-11 09:37:37 +02:00
++session[kCurrentStreamsCount];
2020-06-11 09:37:37 +02:00
// Check if we became busy
if (!isFree() && removeSession(this.freeSessions, normalizedOptions, session)) {
addSession(this.busySessions, normalizedOptions, session);
}
2020-06-11 09:37:37 +02:00
stream.once('close', () => {
--session[kCurrentStreamsCount];
if (isFree()) {
if (session[kCurrentStreamsCount] === 0) {
// All requests are finished, the process may exit now.
session.unref();
}
// Check if we are no longer busy and the session is not broken.
if (removeSession(this.busySessions, normalizedOptions, session) && !session.destroyed && !session.closed) {
// Check the sessions count of this authority and compare it to `maxSessionsCount`.
if (freeSession()) {
this._closeCoveredSessions(normalizedOptions, session);
processListeners();
} else {
session.close();
}
}
}
2020-06-11 09:37:37 +02:00
if (!session.destroyed && !session.closed) {
closeSessionIfCovered(this.freeSessions, normalizedOptions, session);
}
});
2020-06-11 09:37:37 +02:00
return stream;
};
} catch (error) {
for (const listener of listeners) {
listener.reject(error);
}
2020-06-11 09:37:37 +02:00
removeFromQueue();
}
};
2020-06-11 09:37:37 +02:00
entry.listeners = listeners;
entry.completed = false;
entry.destroyed = false;
2020-06-11 09:37:37 +02:00
this.queue[normalizedOptions][normalizedOrigin] = entry;
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
});
}
2020-06-11 09:37:37 +02:00
request(origin, options, headers) {
return new Promise((resolve, reject) => {
this.getSession(origin, options, [{
reject,
resolve: session => {
resolve(session.request(headers));
}
}]);
});
}
2020-06-11 09:37:37 +02:00
createConnection(origin, options) {
return Agent.connect(origin, options);
}
2020-06-11 09:37:37 +02:00
static connect(origin, options) {
options.ALPNProtocols = ['h2'];
2020-06-11 09:37:37 +02:00
const port = origin.port || 443;
const host = origin.hostname || origin.host;
2020-06-11 09:37:37 +02:00
if (typeof options.servername === 'undefined') {
options.servername = host;
}
2020-06-11 09:37:37 +02:00
return tls.connect(port, host, options);
}
2020-06-11 09:37:37 +02:00
closeFreeSessions() {
for (const freeSessions of Object.values(this.freeSessions)) {
for (const session of freeSessions) {
if (session[kCurrentStreamsCount] === 0) {
session.close();
}
}
}
}
2020-06-11 09:37:37 +02:00
destroy(reason) {
for (const busySessions of Object.values(this.busySessions)) {
for (const session of busySessions) {
session.destroy(reason);
}
}
2020-06-11 09:37:37 +02:00
for (const freeSessions of Object.values(this.freeSessions)) {
for (const session of freeSessions) {
session.destroy(reason);
}
}
2020-06-11 09:37:37 +02:00
for (const entriesOfAuthority of Object.values(this.queue)) {
for (const entry of Object.values(entriesOfAuthority)) {
entry.destroyed = true;
}
}
2020-06-11 09:37:37 +02:00
// New requests should NOT attach to destroyed sessions
this.queue = {};
}
}
2020-06-11 09:37:37 +02:00
module.exports = {
Agent,
globalAgent: new Agent()
};
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 903:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const p_cancelable_1 = __webpack_require__(557);
const is_1 = __webpack_require__(534);
const as_promise_1 = __webpack_require__(952);
const create_rejection_1 = __webpack_require__(910);
const core_1 = __webpack_require__(946);
const deep_freeze_1 = __webpack_require__(291);
const errors = {
RequestError: as_promise_1.RequestError,
CacheError: as_promise_1.CacheError,
ReadError: as_promise_1.ReadError,
HTTPError: as_promise_1.HTTPError,
MaxRedirectsError: as_promise_1.MaxRedirectsError,
TimeoutError: as_promise_1.TimeoutError,
ParseError: as_promise_1.ParseError,
CancelError: p_cancelable_1.CancelError,
UnsupportedProtocolError: as_promise_1.UnsupportedProtocolError,
UploadError: as_promise_1.UploadError
};
const { normalizeArguments, mergeOptions } = as_promise_1.PromisableRequest;
const getPromiseOrStream = (options) => options.isStream ? new core_1.default(options.url, options) : as_promise_1.default(options);
const isGotInstance = (value) => ('defaults' in value && 'options' in value.defaults);
const aliases = [
'get',
'post',
'put',
'patch',
'head',
'delete'
];
exports.defaultHandler = (options, next) => next(options);
const callInitHooks = (hooks, options) => {
if (hooks) {
for (const hook of hooks) {
hook(options);
}
}
2020-06-11 09:37:37 +02:00
};
const create = (defaults) => {
// Proxy properties from next handlers
defaults._rawHandlers = defaults.handlers;
defaults.handlers = defaults.handlers.map(fn => ((options, next) => {
// This will be assigned by assigning result
let root;
const result = fn(options, newOptions => {
root = next(newOptions);
return root;
});
if (result !== root && !options.isStream && root) {
const typedResult = result;
const { then: promiseThen, catch: promiseCatch, finally: promiseFianlly } = typedResult;
Object.setPrototypeOf(typedResult, Object.getPrototypeOf(root));
Object.defineProperties(typedResult, Object.getOwnPropertyDescriptors(root));
// These should point to the new promise
// eslint-disable-next-line promise/prefer-await-to-then
typedResult.then = promiseThen;
typedResult.catch = promiseCatch;
typedResult.finally = promiseFianlly;
}
return result;
}));
// Got interface
const got = ((url, options) => {
var _a, _b;
let iteration = 0;
const iterateHandlers = (newOptions) => {
return defaults.handlers[iteration++](newOptions, iteration === defaults.handlers.length ? getPromiseOrStream : iterateHandlers);
};
if (is_1.default.plainObject(url)) {
options = {
...url,
...options
};
url = undefined;
}
try {
// Call `init` hooks
let initHookError;
try {
callInitHooks(defaults.options.hooks.init, options);
callInitHooks((_a = options === null || options === void 0 ? void 0 : options.hooks) === null || _a === void 0 ? void 0 : _a.init, options);
}
catch (error) {
initHookError = error;
}
// Normalize options & call handlers
const normalizedOptions = normalizeArguments(url, options, defaults.options);
normalizedOptions[core_1.kIsNormalizedAlready] = true;
if (initHookError) {
throw new as_promise_1.RequestError(initHookError.message, initHookError, normalizedOptions);
}
return iterateHandlers(normalizedOptions);
}
catch (error) {
if (options === null || options === void 0 ? void 0 : options.isStream) {
throw error;
}
else {
return create_rejection_1.default(error, defaults.options.hooks.beforeError, (_b = options === null || options === void 0 ? void 0 : options.hooks) === null || _b === void 0 ? void 0 : _b.beforeError);
}
}
});
got.extend = (...instancesOrOptions) => {
const optionsArray = [defaults.options];
let handlers = [...defaults._rawHandlers];
let isMutableDefaults;
for (const value of instancesOrOptions) {
if (isGotInstance(value)) {
optionsArray.push(value.defaults.options);
handlers.push(...value.defaults._rawHandlers);
isMutableDefaults = value.defaults.mutableDefaults;
}
else {
optionsArray.push(value);
if ('handlers' in value) {
handlers.push(...value.handlers);
}
isMutableDefaults = value.mutableDefaults;
}
}
handlers = handlers.filter(handler => handler !== exports.defaultHandler);
if (handlers.length === 0) {
handlers.push(exports.defaultHandler);
}
return create({
options: mergeOptions(...optionsArray),
handlers,
mutableDefaults: Boolean(isMutableDefaults)
});
};
// Pagination
const paginateEach = (async function* (url, options) {
let normalizedOptions = normalizeArguments(url, options, defaults.options);
normalizedOptions.resolveBodyOnly = false;
const pagination = normalizedOptions.pagination;
if (!is_1.default.object(pagination)) {
throw new TypeError('`options.pagination` must be implemented');
}
const all = [];
let { countLimit } = pagination;
let numberOfRequests = 0;
while (numberOfRequests < pagination.requestLimit) {
// TODO: Throw when result is not an instance of Response
// eslint-disable-next-line no-await-in-loop
const result = (await got('', normalizedOptions));
// eslint-disable-next-line no-await-in-loop
const parsed = await pagination.transform(result);
const current = [];
for (const item of parsed) {
if (pagination.filter(item, all, current)) {
if (!pagination.shouldContinue(item, all, current)) {
return;
}
yield item;
if (pagination.stackAllItems) {
all.push(item);
}
current.push(item);
if (--countLimit <= 0) {
return;
}
}
}
const optionsToMerge = pagination.paginate(result, all, current);
if (optionsToMerge === false) {
return;
}
if (optionsToMerge === result.request.options) {
normalizedOptions = result.request.options;
}
else if (optionsToMerge !== undefined) {
normalizedOptions = normalizeArguments(undefined, optionsToMerge, normalizedOptions);
}
numberOfRequests++;
}
});
got.paginate = ((url, options) => {
return paginateEach(url, options);
});
got.paginate.all = (async (url, options) => {
const results = [];
for await (const item of got.paginate(url, options)) {
results.push(item);
}
return results;
});
// For those who like very descriptive names
got.paginate.each = paginateEach;
// Stream API
got.stream = ((url, options) => got(url, { ...options, isStream: true }));
// Shortcuts
for (const method of aliases) {
got[method] = ((url, options) => got(url, { ...options, method }));
got.stream[method] = ((url, options) => {
return got(url, { ...options, method, isStream: true });
});
}
Object.assign(got, { ...errors, mergeOptions });
Object.defineProperty(got, 'defaults', {
value: defaults.mutableDefaults ? defaults : deep_freeze_1.default(defaults),
writable: defaults.mutableDefaults,
configurable: defaults.mutableDefaults,
enumerable: true
});
return got;
};
exports.default = create;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 907:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* istanbul ignore file: deprecated */
const url_1 = __webpack_require__(835);
const keys = [
'protocol',
'host',
'hostname',
'port',
'pathname',
'search'
];
exports.default = (origin, options) => {
var _a, _b;
if (options.path) {
if (options.pathname) {
throw new TypeError('Parameters `path` and `pathname` are mutually exclusive.');
}
if (options.search) {
throw new TypeError('Parameters `path` and `search` are mutually exclusive.');
}
if (options.searchParams) {
throw new TypeError('Parameters `path` and `searchParams` are mutually exclusive.');
}
}
if (options.search && options.searchParams) {
throw new TypeError('Parameters `search` and `searchParams` are mutually exclusive.');
}
if (!origin) {
if (!options.protocol) {
throw new TypeError('No URL protocol specified');
}
origin = `${options.protocol}//${(_b = (_a = options.hostname) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : ''}`;
}
const url = new url_1.URL(origin);
if (options.path) {
const searchIndex = options.path.indexOf('?');
if (searchIndex === -1) {
options.pathname = options.path;
}
else {
options.pathname = options.path.slice(0, searchIndex);
options.search = options.path.slice(searchIndex + 1);
}
delete options.path;
}
for (const key of keys) {
if (options[key]) {
url[key] = options[key].toString();
}
}
return url;
};
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 910:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = __webpack_require__(36);
function createRejection(error, ...beforeErrorGroups) {
const promise = (async () => {
if (error instanceof types_1.RequestError) {
try {
for (const hooks of beforeErrorGroups) {
if (hooks) {
for (const hook of hooks) {
// eslint-disable-next-line no-await-in-loop
error = await hook(error);
}
}
}
}
catch (error_) {
error = error_;
}
}
throw error;
})();
const returnPromise = () => promise;
promise.json = returnPromise;
promise.text = returnPromise;
promise.buffer = returnPromise;
promise.on = returnPromise;
return promise;
}
2020-06-11 09:37:37 +02:00
exports.default = createRejection;
/***/ }),
/***/ 916:
/***/ (function(__unusedmodule, exports) {
"use strict";
Object.defineProperty(exports, '__esModule', { value: true });
const VERSION = "1.0.0";
/**
2020-06-11 09:37:37 +02:00
* @param octokit Octokit instance
* @param options Options passed to Octokit constructor
*/
2020-06-11 09:37:37 +02:00
function requestLog(octokit) {
octokit.hook.wrap("request", (request, options) => {
octokit.log.debug("request", options);
const start = Date.now();
const requestOptions = octokit.request.endpoint.parse(options);
const path = requestOptions.url.replace(options.baseUrl, "");
return request(options).then(response => {
octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`);
return response;
}).catch(error => {
octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`);
throw error;
});
});
}
2020-06-11 09:37:37 +02:00
requestLog.VERSION = VERSION;
2020-06-11 09:37:37 +02:00
exports.requestLog = requestLog;
//# sourceMappingURL=index.js.map
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 927:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
2020-06-11 09:37:37 +02:00
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = __webpack_require__(36);
const retryAfterStatusCodes = new Set([413, 429, 503]);
const isErrorWithResponse = (error) => (error instanceof types_1.HTTPError || error instanceof types_1.ParseError || error instanceof types_1.MaxRedirectsError);
const calculateRetryDelay = ({ attemptCount, retryOptions, error }) => {
if (attemptCount > retryOptions.limit) {
return 0;
}
const hasMethod = retryOptions.methods.includes(error.options.method);
const hasErrorCode = retryOptions.errorCodes.includes(error.code);
const hasStatusCode = isErrorWithResponse(error) && retryOptions.statusCodes.includes(error.response.statusCode);
if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
return 0;
}
if (isErrorWithResponse(error)) {
const { response } = error;
if (response && 'retry-after' in response.headers && retryAfterStatusCodes.has(response.statusCode)) {
let after = Number(response.headers['retry-after']);
if (Number.isNaN(after)) {
after = Date.parse(response.headers['retry-after']) - Date.now();
}
else {
after *= 1000;
}
if (retryOptions.maxRetryAfter === undefined || after > retryOptions.maxRetryAfter) {
return 0;
}
return after;
}
if (response.statusCode === 413) {
return 0;
}
}
const noise = Math.random() * 100;
return ((2 ** (attemptCount - 1)) * 1000) + noise;
};
exports.default = calculateRetryDelay;
2020-06-11 09:37:37 +02:00
/***/ }),
2020-06-11 09:37:37 +02:00
/***/ 929:
/***/ (function(module, __unusedexports, __webpack_require__) {
2020-06-11 09:37:37 +02:00
module.exports = hasNextPage
2020-06-11 09:37:37 +02:00
const deprecate = __webpack_require__(370)
const getPageLinks = __webpack_require__(577)
2020-06-11 09:37:37 +02:00
function hasNextPage (link) {
deprecate(`octokit.hasNextPage() You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`)
return getPageLinks(link).next
}
/***/ }),
/***/ 946:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = __webpack_require__(669);
const stream_1 = __webpack_require__(413);
const fs_1 = __webpack_require__(747);
const url_1 = __webpack_require__(835);
const http = __webpack_require__(605);
const http_1 = __webpack_require__(605);
const https = __webpack_require__(211);
const http_timer_1 = __webpack_require__(490);
const cacheable_lookup_1 = __webpack_require__(570);
const CacheableRequest = __webpack_require__(390);
const decompressResponse = __webpack_require__(861);
// @ts-ignore Missing types
const http2wrapper = __webpack_require__(157);
const lowercaseKeys = __webpack_require__(474);
const getStream = __webpack_require__(145);
const is_1 = __webpack_require__(534);
const get_body_size_1 = __webpack_require__(786);
const is_form_data_1 = __webpack_require__(460);
const proxy_events_1 = __webpack_require__(628);
const timed_out_1 = __webpack_require__(811);
const url_to_options_1 = __webpack_require__(10);
const options_to_url_1 = __webpack_require__(907);
const weakable_map_1 = __webpack_require__(48);
const dns_ip_version_1 = __webpack_require__(738);
const deprecation_warning_1 = __webpack_require__(189);
const kRequest = Symbol('request');
const kResponse = Symbol('response');
const kResponseSize = Symbol('responseSize');
const kDownloadedSize = Symbol('downloadedSize');
const kBodySize = Symbol('bodySize');
const kUploadedSize = Symbol('uploadedSize');
const kServerResponsesPiped = Symbol('serverResponsesPiped');
const kUnproxyEvents = Symbol('unproxyEvents');
const kIsFromCache = Symbol('isFromCache');
const kCancelTimeouts = Symbol('cancelTimeouts');
const kStartedReading = Symbol('startedReading');
const kStopReading = Symbol('stopReading');
const kTriggerRead = Symbol('triggerRead');
const kBody = Symbol('body');
const kJobs = Symbol('jobs');
const kOriginalResponse = Symbol('originalResponse');
exports.kIsNormalizedAlready = Symbol('isNormalizedAlready');
const supportsBrotli = is_1.default.string(process.versions.brotli);
exports.withoutBody = new Set(['GET', 'HEAD']);
exports.knownHookEvents = ['init', 'beforeRequest', 'beforeRedirect', 'beforeError'];
function validateSearchParameters(searchParameters) {
// eslint-disable-next-line guard-for-in
for (const key in searchParameters) {
const value = searchParameters[key];
if (!is_1.default.string(value) && !is_1.default.number(value) && !is_1.default.boolean(value) && !is_1.default.null_(value)) {
throw new TypeError(`The \`searchParams\` value '${String(value)}' must be a string, number, boolean or null`);
}
}
}
function isClientRequest(clientRequest) {
return is_1.default.object(clientRequest) && !('statusCode' in clientRequest);
}
const cacheableStore = new weakable_map_1.default();
const waitForOpenFile = async (file) => new Promise((resolve, reject) => {
const onError = (error) => {
reject(error);
};
if (!file.pending) {
resolve();
}
file.once('error', onError);
file.once('ready', () => {
file.off('error', onError);
resolve();
});
});
const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);
const nonEnumerableProperties = [
'context',
'body',
'json',
'form'
];
const setNonEnumerableProperties = (sources, to) => {
// Non enumerable properties shall not be merged
const properties = {};
for (const source of sources) {
if (!source) {
continue;
}
for (const name of nonEnumerableProperties) {
if (!(name in source)) {
continue;
}
properties[name] = {
writable: true,
configurable: true,
enumerable: false,
// @ts-ignore TS doesn't see the check above
value: source[name]
};
}
}
Object.defineProperties(to, properties);
};
class RequestError extends Error {
constructor(message, error, self) {
var _a;
super(message);
Error.captureStackTrace(this, this.constructor);
this.name = 'RequestError';
this.code = error.code;
if (self instanceof Request) {
Object.defineProperty(this, 'request', {
enumerable: false,
value: self
});
Object.defineProperty(this, 'response', {
enumerable: false,
value: self[kResponse]
});
Object.defineProperty(this, 'options', {
// This fails because of TS 3.7.2 useDefineForClassFields
// Ref: https://github.com/microsoft/TypeScript/issues/34972
enumerable: false,
value: self.options
});
}
else {
Object.defineProperty(this, 'options', {
// This fails because of TS 3.7.2 useDefineForClassFields
// Ref: https://github.com/microsoft/TypeScript/issues/34972
enumerable: false,
value: self
});
}
this.timings = (_a = this.request) === null || _a === void 0 ? void 0 : _a.timings;
// Recover the original stacktrace
if (!is_1.default.undefined(error.stack)) {
const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;
const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse();
const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse();
// Remove duplicated traces
while (errorStackTrace.length !== 0 && errorStackTrace[0] === thisStackTrace[0]) {
thisStackTrace.shift();
}
this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`;
}
}
}
exports.RequestError = RequestError;
class MaxRedirectsError extends RequestError {
constructor(request) {
super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);
this.name = 'MaxRedirectsError';
}
}
exports.MaxRedirectsError = MaxRedirectsError;
class HTTPError extends RequestError {
constructor(response) {
super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);
this.name = 'HTTPError';
}
}
exports.HTTPError = HTTPError;
class CacheError extends RequestError {
constructor(error, request) {
super(error.message, error, request);
this.name = 'CacheError';
}
}
exports.CacheError = CacheError;
class UploadError extends RequestError {
constructor(error, request) {
super(error.message, error, request);
this.name = 'UploadError';
}
}
exports.UploadError = UploadError;
class TimeoutError extends RequestError {
constructor(error, timings, request) {
super(error.message, error, request);
this.name = 'TimeoutError';
this.event = error.event;
this.timings = timings;
}
}
exports.TimeoutError = TimeoutError;
class ReadError extends RequestError {
constructor(error, request) {
super(error.message, error, request);
this.name = 'ReadError';
}
}
exports.ReadError = ReadError;
class UnsupportedProtocolError extends RequestError {
constructor(options) {
super(`Unsupported protocol "${options.url.protocol}"`, {}, options);
this.name = 'UnsupportedProtocolError';
}
}
exports.UnsupportedProtocolError = UnsupportedProtocolError;
const proxiedRequestEvents = [
'socket',
'connect',
'continue',
'information',
'upgrade',
'timeout'
];
class Request extends stream_1.Duplex {
constructor(url, options = {}, defaults) {
super({
// It needs to be zero because we're just proxying the data to another stream
highWaterMark: 0
});
this[kDownloadedSize] = 0;
this[kUploadedSize] = 0;
this.requestInitialized = false;
this[kServerResponsesPiped] = new Set();
this.redirects = [];
this[kStopReading] = false;
this[kTriggerRead] = false;
this[kJobs] = [];
// TODO: Remove this when targeting Node.js >= 12
this._progressCallbacks = [];
const unlockWrite = () => this._unlockWrite();
const lockWrite = () => this._lockWrite();
this.on('pipe', (source) => {
source.prependListener('data', unlockWrite);
source.on('data', lockWrite);
source.prependListener('end', unlockWrite);
source.on('end', lockWrite);
});
this.on('unpipe', (source) => {
source.off('data', unlockWrite);
source.off('data', lockWrite);
source.off('end', unlockWrite);
source.off('end', lockWrite);
});
this.on('pipe', source => {
if (source instanceof http_1.IncomingMessage) {
this.options.headers = {
...source.headers,
...this.options.headers
};
}
});
const { json, body, form } = options;
if (json || body || form) {
this._lockWrite();
}
(async (nonNormalizedOptions) => {
var _a;
try {
if (nonNormalizedOptions.body instanceof fs_1.ReadStream) {
await waitForOpenFile(nonNormalizedOptions.body);
}
if (exports.kIsNormalizedAlready in nonNormalizedOptions) {
this.options = nonNormalizedOptions;
}
else {
// @ts-ignore Common TypeScript bug saying that `this.constructor` is not accessible
this.options = this.constructor.normalizeArguments(url, nonNormalizedOptions, defaults);
}
const { url: normalizedURL } = this.options;
if (!normalizedURL) {
throw new TypeError('Missing `url` property');
}
this.requestUrl = normalizedURL.toString();
decodeURI(this.requestUrl);
await this._finalizeBody();
await this._makeRequest();
if (this.destroyed) {
(_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroy();
return;
}
// Queued writes etc.
for (const job of this[kJobs]) {
job();
}
this.requestInitialized = true;
}
catch (error) {
if (error instanceof RequestError) {
this._beforeError(error);
return;
}
// This is a workaround for https://github.com/nodejs/node/issues/33335
if (!this.destroyed) {
this.destroy(error);
}
}
})(options);
}
static normalizeArguments(url, options, defaults) {
var _a, _b, _c, _d;
const rawOptions = options;
if (is_1.default.object(url) && !is_1.default.urlInstance(url)) {
options = { ...defaults, ...url, ...options };
}
else {
if (url && options && options.url) {
throw new TypeError('The `url` option is mutually exclusive with the `input` argument');
}
options = { ...defaults, ...options };
if (url) {
options.url = url;
}
if (is_1.default.urlInstance(options.url)) {
options.url = new url_1.URL(options.url.toString());
}
}
// TODO: Deprecate URL options in Got 12.
// Support extend-specific options
if (options.cache === false) {
options.cache = undefined;
}
if (options.dnsCache === false) {
options.dnsCache = undefined;
}
// Nice type assertions
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.method);
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.headers);
is_1.assert.any([is_1.default.string, is_1.default.urlInstance, is_1.default.undefined], options.prefixUrl);
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cookieJar);
is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.searchParams);
is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.cache);
is_1.assert.any([is_1.default.object, is_1.default.number, is_1.default.undefined], options.timeout);
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.context);
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.hooks);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.decompress);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.ignoreInvalidCookies);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.followRedirect);
is_1.assert.any([is_1.default.number, is_1.default.undefined], options.maxRedirects);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.throwHttpErrors);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.http2);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.allowGetBody);
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.localAddress);
is_1.assert.any([dns_ip_version_1.isDnsLookupIpVersion, is_1.default.undefined], options.dnsLookupIpVersion);
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.https);
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.rejectUnauthorized);
if (options.https) {
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.https.rejectUnauthorized);
is_1.assert.any([is_1.default.function_, is_1.default.undefined], options.https.checkServerIdentity);
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificateAuthority);
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.key);
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificate);
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.https.passphrase);
}
// `options.method`
if (is_1.default.string(options.method)) {
options.method = options.method.toUpperCase();
}
else {
options.method = 'GET';
}
// `options.headers`
if (options.headers === (defaults === null || defaults === void 0 ? void 0 : defaults.headers)) {
options.headers = { ...options.headers };
}
else {
options.headers = lowercaseKeys({ ...(defaults === null || defaults === void 0 ? void 0 : defaults.headers), ...options.headers });
}
// Disallow legacy `url.Url`
if ('slashes' in options) {
throw new TypeError('The legacy `url.Url` has been deprecated. Use `URL` instead.');
}
// `options.auth`
if ('auth' in options) {
throw new TypeError('Parameter `auth` is deprecated. Use `username` / `password` instead.');
}
// `options.searchParams`
if ('searchParams' in options) {
if (options.searchParams && options.searchParams !== (defaults === null || defaults === void 0 ? void 0 : defaults.searchParams)) {
if (!is_1.default.string(options.searchParams) && !(options.searchParams instanceof url_1.URLSearchParams)) {
validateSearchParameters(options.searchParams);
}
const searchParameters = new url_1.URLSearchParams(options.searchParams);
// `normalizeArguments()` is also used to merge options
(_a = defaults === null || defaults === void 0 ? void 0 : defaults.searchParams) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => {
// Only use default if one isn't already defined
if (!searchParameters.has(key)) {
searchParameters.append(key, value);
}
});
options.searchParams = searchParameters;
}
}
// `options.username` & `options.password`
options.username = (_b = options.username) !== null && _b !== void 0 ? _b : '';
options.password = (_c = options.password) !== null && _c !== void 0 ? _c : '';
// `options.prefixUrl` & `options.url`
if (options.prefixUrl) {
options.prefixUrl = options.prefixUrl.toString();
if (options.prefixUrl !== '' && !options.prefixUrl.endsWith('/')) {
options.prefixUrl += '/';
}
}
else {
options.prefixUrl = '';
}
if (is_1.default.string(options.url)) {
if (options.url.startsWith('/')) {
throw new Error('`input` must not start with a slash when using `prefixUrl`');
}
options.url = options_to_url_1.default(options.prefixUrl + options.url, options);
}
else if ((is_1.default.undefined(options.url) && options.prefixUrl !== '') || options.protocol) {
options.url = options_to_url_1.default(options.prefixUrl, options);
}
if (options.url) {
// Make it possible to change `options.prefixUrl`
let { prefixUrl } = options;
Object.defineProperty(options, 'prefixUrl', {
set: (value) => {
const url = options.url;
if (!url.href.startsWith(value)) {
throw new Error(`Cannot change \`prefixUrl\` from ${prefixUrl} to ${value}: ${url.href}`);
}
options.url = new url_1.URL(value + url.href.slice(prefixUrl.length));
prefixUrl = value;
},
get: () => prefixUrl
});
// Support UNIX sockets
let { protocol } = options.url;
if (protocol === 'unix:') {
protocol = 'http:';
options.url = new url_1.URL(`http://unix${options.url.pathname}${options.url.search}`);
}
// Set search params
if (options.searchParams) {
options.url.search = options.searchParams.toString();
}
// Protocol check
if (protocol !== 'http:' && protocol !== 'https:') {
throw new UnsupportedProtocolError(options);
}
// Update `username`
if (options.username === '') {
options.username = options.url.username;
}
else {
options.url.username = options.username;
}
// Update `password`
if (options.password === '') {
options.password = options.url.password;
}
else {
options.url.password = options.password;
}
}
// `options.cookieJar`
const { cookieJar } = options;
if (cookieJar) {
let { setCookie, getCookieString } = cookieJar;
is_1.assert.function_(setCookie);
is_1.assert.function_(getCookieString);
/* istanbul ignore next: Horrible `tough-cookie` v3 check */
if (setCookie.length === 4 && getCookieString.length === 0) {
setCookie = util_1.promisify(setCookie.bind(options.cookieJar));
getCookieString = util_1.promisify(getCookieString.bind(options.cookieJar));
options.cookieJar = {
setCookie,
getCookieString
};
}
}
// `options.cache`
const { cache } = options;
if (cache) {
if (!cacheableStore.has(cache)) {
cacheableStore.set(cache, new CacheableRequest(((requestOptions, handler) => requestOptions[kRequest](requestOptions, handler)), cache));
}
}
// `options.dnsCache`
if (options.dnsCache === true) {
options.dnsCache = new cacheable_lookup_1.default();
}
else if (!is_1.default.undefined(options.dnsCache) && !options.dnsCache.lookup) {
throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${is_1.default(options.dnsCache)}`);
}
// `options.timeout`
if (is_1.default.number(options.timeout)) {
options.timeout = { request: options.timeout };
}
else if (defaults && options.timeout !== defaults.timeout) {
options.timeout = {
...defaults.timeout,
...options.timeout
};
}
else {
options.timeout = { ...options.timeout };
}
// `options.context`
if (!options.context) {
options.context = {};
}
// `options.hooks`
const areHooksDefault = options.hooks === (defaults === null || defaults === void 0 ? void 0 : defaults.hooks);
options.hooks = { ...options.hooks };
for (const event of exports.knownHookEvents) {
if (event in options.hooks) {
if (is_1.default.array(options.hooks[event])) {
// See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
options.hooks[event] = [...options.hooks[event]];
}
else {
throw new TypeError(`Parameter \`${event}\` must be an Array, got ${is_1.default(options.hooks[event])}`);
}
}
else {
options.hooks[event] = [];
}
}
if (defaults && !areHooksDefault) {
for (const event of exports.knownHookEvents) {
const defaultHooks = defaults.hooks[event];
if (defaultHooks.length !== 0) {
// See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
options.hooks[event] = [
...defaults.hooks[event],
...options.hooks[event]
];
}
}
}
// DNS options
if ('family' in options) {
deprecation_warning_1.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"');
}
// HTTPS options
if (defaults === null || defaults === void 0 ? void 0 : defaults.https) {
options.https = { ...defaults.https, ...options.https };
}
if ('rejectUnauthorized' in options) {
deprecation_warning_1.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"');
}
if ('checkServerIdentity' in options) {
deprecation_warning_1.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"');
}
if ('ca' in options) {
deprecation_warning_1.default('"options.ca" was never documented, please use "options.https.certificateAuthority"');
}
if ('key' in options) {
deprecation_warning_1.default('"options.key" was never documented, please use "options.https.key"');
}
if ('cert' in options) {
deprecation_warning_1.default('"options.cert" was never documented, please use "options.https.certificate"');
}
if ('passphrase' in options) {
deprecation_warning_1.default('"options.passphrase" was never documented, please use "options.https.passphrase"');
}
// Other options
if ('followRedirects' in options) {
throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
}
if (options.agent) {
for (const key in options.agent) {
if (key !== 'http' && key !== 'https' && key !== 'http2') {
throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${key}\``);
}
}
}
options.maxRedirects = (_d = options.maxRedirects) !== null && _d !== void 0 ? _d : 0;
// Set non-enumerable properties
setNonEnumerableProperties([defaults, rawOptions], options);
return options;
}
_lockWrite() {
const onLockedWrite = () => {
throw new TypeError('The payload has been already provided');
};
this.write = onLockedWrite;
this.end = onLockedWrite;
}
_unlockWrite() {
this.write = super.write;
this.end = super.end;
}
async _finalizeBody() {
const { options } = this;
const { headers } = options;
const isForm = !is_1.default.undefined(options.form);
const isJSON = !is_1.default.undefined(options.json);
const isBody = !is_1.default.undefined(options.body);
const hasPayload = isForm || isJSON || isBody;
const cannotHaveBody = exports.withoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);
this._cannotHaveBody = cannotHaveBody;
if (hasPayload) {
if (cannotHaveBody) {
throw new TypeError(`The \`${options.method}\` method cannot be used with a body`);
}
if ([isBody, isForm, isJSON].filter(isTrue => isTrue).length > 1) {
throw new TypeError('The `body`, `json` and `form` options are mutually exclusive');
}
if (isBody &&
!(options.body instanceof stream_1.Readable) &&
!is_1.default.string(options.body) &&
!is_1.default.buffer(options.body) &&
!is_form_data_1.default(options.body)) {
throw new TypeError('The `body` option must be a stream.Readable, string or Buffer');
}
if (isForm && !is_1.default.object(options.form)) {
throw new TypeError('The `form` option must be an Object');
}
{
// Serialize body
const noContentType = !is_1.default.string(headers['content-type']);
if (isBody) {
// Special case for https://github.com/form-data/form-data
if (is_form_data_1.default(options.body) && noContentType) {
headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;
}
this[kBody] = options.body;
}
else if (isForm) {
if (noContentType) {
headers['content-type'] = 'application/x-www-form-urlencoded';
}
this[kBody] = (new url_1.URLSearchParams(options.form)).toString();
}
else {
if (noContentType) {
headers['content-type'] = 'application/json';
}
this[kBody] = options.stringifyJson(options.json);
}
const uploadBodySize = await get_body_size_1.default(this[kBody], options.headers);
// See https://tools.ietf.org/html/rfc7230#section-3.3.2
// A user agent SHOULD send a Content-Length in a request message when
// no Transfer-Encoding is sent and the request method defines a meaning
// for an enclosed payload body. For example, a Content-Length header
// field is normally sent in a POST request even when the value is 0
// (indicating an empty payload body). A user agent SHOULD NOT send a
// Content-Length header field when the request message does not contain
// a payload body and the method semantics do not anticipate such a
// body.
if (is_1.default.undefined(headers['content-length']) && is_1.default.undefined(headers['transfer-encoding'])) {
if (!cannotHaveBody && !is_1.default.undefined(uploadBodySize)) {
headers['content-length'] = String(uploadBodySize);
}
}
}
}
else if (cannotHaveBody) {
this._lockWrite();
}
else {
this._unlockWrite();
}
this[kBodySize] = Number(headers['content-length']) || undefined;
}
async _onResponse(response) {
const { options } = this;
const { url } = options;
this[kOriginalResponse] = response;
if (options.decompress) {
response = decompressResponse(response);
}
const statusCode = response.statusCode;
const typedResponse = response;
typedResponse.statusMessage = typedResponse.statusMessage ? typedResponse.statusMessage : http.STATUS_CODES[statusCode];
typedResponse.url = options.url.toString();
typedResponse.requestUrl = this.requestUrl;
typedResponse.redirectUrls = this.redirects;
typedResponse.request = this;
typedResponse.isFromCache = response.fromCache || false;
typedResponse.ip = this.ip;
this[kIsFromCache] = typedResponse.isFromCache;
this[kResponseSize] = Number(response.headers['content-length']) || undefined;
this[kResponse] = response;
response.once('end', () => {
this[kResponseSize] = this[kDownloadedSize];
this.emit('downloadProgress', this.downloadProgress);
});
response.once('error', (error) => {
// Force clean-up, because some packages don't do this.
// TODO: Fix decompress-response
response.destroy();
this._beforeError(new ReadError(error, this));
});
response.once('aborted', () => {
this._beforeError(new ReadError({
name: 'Error',
message: 'The server aborted the pending request'
}, this));
});
this.emit('downloadProgress', this.downloadProgress);
const rawCookies = response.headers['set-cookie'];
if (is_1.default.object(options.cookieJar) && rawCookies) {
let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));
if (options.ignoreInvalidCookies) {
promises = promises.map(async (p) => p.catch(() => { }));
}
try {
await Promise.all(promises);
}
catch (error) {
this._beforeError(error);
return;
}
}
if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {
// We're being redirected, we don't care about the response.
// It'd be besto to abort the request, but we can't because
// we would have to sacrifice the TCP connection. We don't want that.
response.resume();
if (this[kRequest]) {
this[kCancelTimeouts]();
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
delete this[kRequest];
this[kUnproxyEvents]();
}
const shouldBeGet = statusCode === 303 && options.method !== 'GET' && options.method !== 'HEAD';
if (shouldBeGet || !options.methodRewriting) {
// Server responded with "see other", indicating that the resource exists at another location,
// and the client should request it from that location via GET or HEAD.
options.method = 'GET';
if ('body' in options) {
delete options.body;
}
if ('json' in options) {
delete options.json;
}
if ('form' in options) {
delete options.form;
}
}
if (this.redirects.length >= options.maxRedirects) {
this._beforeError(new MaxRedirectsError(this));
return;
}
try {
// Do not remove. See https://github.com/sindresorhus/got/pull/214
const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString();
// Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604
const redirectUrl = new url_1.URL(redirectBuffer, url);
const redirectString = redirectUrl.toString();
decodeURI(redirectString);
// Redirecting to a different site, clear sensitive data.
if (redirectUrl.hostname !== url.hostname) {
if ('host' in options.headers) {
delete options.headers.host;
}
if ('cookie' in options.headers) {
delete options.headers.cookie;
}
if ('authorization' in options.headers) {
delete options.headers.authorization;
}
if (options.username || options.password) {
delete options.username;
delete options.password;
}
}
this.redirects.push(redirectString);
options.url = redirectUrl;
for (const hook of options.hooks.beforeRedirect) {
// eslint-disable-next-line no-await-in-loop
await hook(options, typedResponse);
}
this.emit('redirect', typedResponse, options);
await this._makeRequest();
}
catch (error) {
this._beforeError(error);
return;
}
return;
}
const limitStatusCode = options.followRedirect ? 299 : 399;
const isOk = (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
if (options.throwHttpErrors && !isOk) {
await this._beforeError(new HTTPError(typedResponse));
if (this.destroyed) {
return;
}
}
response.on('readable', () => {
if (this[kTriggerRead]) {
this._read();
}
});
this.on('resume', () => {
response.resume();
});
this.on('pause', () => {
response.pause();
});
response.once('end', () => {
this.push(null);
});
this.emit('response', response);
for (const destination of this[kServerResponsesPiped]) {
if (destination.headersSent) {
continue;
}
// eslint-disable-next-line guard-for-in
for (const key in response.headers) {
const isAllowed = options.decompress ? key !== 'content-encoding' : true;
const value = response.headers[key];
if (isAllowed) {
destination.setHeader(key, value);
}
}
destination.statusCode = statusCode;
}
}
_onRequest(request) {
const { options } = this;
const { timeout, url } = options;
http_timer_1.default(request);
this[kCancelTimeouts] = timed_out_1.default(request, timeout, url);
const responseEventName = options.cache ? 'cacheableResponse' : 'response';
request.once(responseEventName, (response) => {
this._onResponse(response);
});
request.once('error', (error) => {
// Force clean-up, because some packages (e.g. nock) don't do this.
request.destroy();
if (error instanceof timed_out_1.TimeoutError) {
error = new TimeoutError(error, this.timings, this);
}
else {
error = new RequestError(error.message, error, this);
}
this._beforeError(error);
});
this[kUnproxyEvents] = proxy_events_1.default(request, this, proxiedRequestEvents);
this[kRequest] = request;
this.emit('uploadProgress', this.uploadProgress);
// Send body
const body = this[kBody];
const currentRequest = this.redirects.length === 0 ? this : request;
if (is_1.default.nodeStream(body)) {
body.pipe(currentRequest);
body.once('error', (error) => {
this._beforeError(new UploadError(error, this));
});
body.once('end', () => {
delete options.body;
});
}
else {
this._unlockWrite();
if (!is_1.default.undefined(body)) {
this._writeRequest(body, null, () => { });
currentRequest.end();
this._lockWrite();
}
else if (this._cannotHaveBody || this._noPipe) {
currentRequest.end();
this._lockWrite();
}
}
this.emit('request', request);
}
async _createCacheableRequest(url, options) {
return new Promise((resolve, reject) => {
// TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed
Object.assign(options, url_to_options_1.default(url));
// `http-cache-semantics` checks this
delete options.url;
// This is ugly
const cacheRequest = cacheableStore.get(options.cache)(options, response => {
const typedResponse = response;
const { req } = typedResponse;
// TODO: Fix `cacheable-response`
typedResponse._readableState.autoDestroy = false;
if (req) {
req.emit('cacheableResponse', typedResponse);
}
resolve(typedResponse);
});
// Restore options
options.url = url;
cacheRequest.once('error', reject);
cacheRequest.once('request', resolve);
});
}
async _makeRequest() {
var _a;
const { options } = this;
const { headers } = options;
for (const key in headers) {
if (is_1.default.undefined(headers[key])) {
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
delete headers[key];
}
else if (is_1.default.null_(headers[key])) {
throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`);
}
}
if (options.decompress && is_1.default.undefined(headers['accept-encoding'])) {
headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';
}
// Set cookies
if (options.cookieJar) {
const cookieString = await options.cookieJar.getCookieString(options.url.toString());
if (is_1.default.nonEmptyString(cookieString)) {
options.headers.cookie = cookieString;
}
}
for (const hook of options.hooks.beforeRequest) {
// eslint-disable-next-line no-await-in-loop
const result = await hook(options);
if (!is_1.default.undefined(result)) {
// @ts-ignore Skip the type mismatch to support abstract responses
options.request = () => result;
break;
}
}
const { agent, request, timeout, url } = options;
if (options.dnsCache && !('lookup' in options)) {
options.lookup = options.dnsCache.lookup;
}
// UNIX sockets
if (url.hostname === 'unix') {
const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`);
if (matches === null || matches === void 0 ? void 0 : matches.groups) {
const { socketPath, path } = matches.groups;
Object.assign(options, {
socketPath,
path,
host: ''
});
}
}
const isHttps = url.protocol === 'https:';
// Fallback function
let fallbackFn;
if (options.http2) {
fallbackFn = http2wrapper.auto;
}
else {
fallbackFn = isHttps ? https.request : http.request;
}
const realFn = (_a = options.request) !== null && _a !== void 0 ? _a : fallbackFn;
// Cache support
const fn = options.cache ? this._createCacheableRequest : realFn;
// Pass an agent directly when HTTP2 is disabled
if (agent && !options.http2) {
options.agent = agent[isHttps ? 'https' : 'http'];
}
// Prepare plain HTTP request options
options[kRequest] = realFn;
delete options.request;
delete options.timeout;
const requestOptions = options;
// If `dnsLookupIpVersion` is not present do not override `family`
if (options.dnsLookupIpVersion !== undefined) {
try {
requestOptions.family = dns_ip_version_1.dnsLookupIpVersionToFamily(options.dnsLookupIpVersion);
}
catch (_b) {
throw new Error('Invalid `dnsLookupIpVersion` option value');
}
}
// HTTPS options remapping
if (options.https) {
if ('rejectUnauthorized' in options.https) {
requestOptions.rejectUnauthorized = options.https.rejectUnauthorized;
}
if (options.https.checkServerIdentity) {
requestOptions.checkServerIdentity = options.https.checkServerIdentity;
}
if (options.https.certificateAuthority) {
requestOptions.ca = options.https.certificateAuthority;
}
if (options.https.certificate) {
requestOptions.cert = options.https.certificate;
}
if (options.https.key) {
requestOptions.key = options.https.key;
}
if (options.https.passphrase) {
requestOptions.passphrase = options.https.passphrase;
}
}
try {
let requestOrResponse = await fn(url, requestOptions);
if (is_1.default.undefined(requestOrResponse)) {
requestOrResponse = fallbackFn(url, requestOptions);
}
// Restore options
options.request = request;
options.timeout = timeout;
options.agent = agent;
if (isClientRequest(requestOrResponse)) {
this._onRequest(requestOrResponse);
// Emit the response after the stream has been ended
}
else if (this.writable) {
this.once('finish', () => {
this._onResponse(requestOrResponse);
});
this._unlockWrite();
this.end();
this._lockWrite();
}
else {
this._onResponse(requestOrResponse);
}
}
catch (error) {
if (error instanceof CacheableRequest.CacheError) {
throw new CacheError(error, this);
}
throw new RequestError(error.message, error, this);
}
}
async _beforeError(error) {
if (this.destroyed) {
return;
}
this[kStopReading] = true;
if (!(error instanceof RequestError)) {
error = new RequestError(error.message, error, this);
}
try {
const { response } = error;
if (response) {
response.setEncoding(this._readableState.encoding);
response.rawBody = await getStream.buffer(response);
response.body = response.rawBody.toString();
}
}
catch (_) { }
try {
for (const hook of this.options.hooks.beforeError) {
// eslint-disable-next-line no-await-in-loop
error = await hook(error);
}
}
catch (error_) {
error = new RequestError(error_.message, error_, this);
}
this.destroy(error);
}
_read() {
this[kTriggerRead] = true;
const response = this[kResponse];
if (response && !this[kStopReading]) {
// We cannot put this in the `if` above
// because `.read()` also triggers the `end` event
if (response.readableLength) {
this[kTriggerRead] = false;
}
let data;
while ((data = response.read()) !== null) {
this[kDownloadedSize] += data.length;
this[kStartedReading] = true;
const progress = this.downloadProgress;
if (progress.percent < 1) {
this.emit('downloadProgress', progress);
}
this.push(data);
}
}
}
_write(chunk, encoding, callback) {
const write = () => {
this._writeRequest(chunk, encoding, callback);
};
if (this.requestInitialized) {
write();
}
else {
this[kJobs].push(write);
}
}
_writeRequest(chunk, encoding, callback) {
this._progressCallbacks.push(() => {
this[kUploadedSize] += Buffer.byteLength(chunk, encoding);
const progress = this.uploadProgress;
if (progress.percent < 1) {
this.emit('uploadProgress', progress);
}
});
// TODO: What happens if it's from cache? Then this[kRequest] won't be defined.
this[kRequest].write(chunk, encoding, (error) => {
if (!error && this._progressCallbacks.length !== 0) {
this._progressCallbacks.shift()();
}
callback(error);
});
}
_final(callback) {
const endRequest = () => {
// FIX: Node.js 10 calls the write callback AFTER the end callback!
while (this._progressCallbacks.length !== 0) {
this._progressCallbacks.shift()();
}
// We need to check if `this[kRequest]` is present,
// because it isn't when we use cache.
if (!(kRequest in this)) {
callback();
return;
}
if (this[kRequest].destroyed) {
callback();
return;
}
this[kRequest].end((error) => {
if (!error) {
this[kBodySize] = this[kUploadedSize];
this.emit('uploadProgress', this.uploadProgress);
this[kRequest].emit('upload-complete');
}
callback(error);
});
};
if (this.requestInitialized) {
endRequest();
}
else {
this[kJobs].push(endRequest);
}
}
_destroy(error, callback) {
var _a;
if (kRequest in this) {
this[kCancelTimeouts]();
// TODO: Remove the next `if` when these get fixed:
// - https://github.com/nodejs/node/issues/32851
if (!((_a = this[kResponse]) === null || _a === void 0 ? void 0 : _a.complete)) {
this[kRequest].destroy();
}
}
if (error !== null && !is_1.default.undefined(error) && !(error instanceof RequestError)) {
error = new RequestError(error.message, error, this);
}
callback(error);
}
get ip() {
var _a;
return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.socket.remoteAddress;
}
get aborted() {
var _a, _b, _c;
return ((_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroyed) !== null && _b !== void 0 ? _b : this.destroyed) && !((_c = this[kOriginalResponse]) === null || _c === void 0 ? void 0 : _c.complete);
}
get socket() {
var _a;
return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.socket;
}
2020-06-11 09:37:37 +02:00
get downloadProgress() {
let percent;
if (this[kResponseSize]) {
percent = this[kDownloadedSize] / this[kResponseSize];
}
else if (this[kResponseSize] === this[kDownloadedSize]) {
percent = 1;
}
else {
percent = 0;
}
return {
percent,
transferred: this[kDownloadedSize],
total: this[kResponseSize]
};
}
2020-06-11 09:37:37 +02:00
get uploadProgress() {
let percent;
if (this[kBodySize]) {
percent = this[kUploadedSize] / this[kBodySize];
}
else if (this[kBodySize] === this[kUploadedSize]) {
percent = 1;
}
else {
percent = 0;
}
return {
percent,
transferred: this[kUploadedSize],
total: this[kBodySize]
};
}
2020-06-11 09:37:37 +02:00
get timings() {
var _a;
return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.timings;
}
get isFromCache() {
return this[kIsFromCache];
}
get _response() {
return this[kResponse];
}
pipe(destination, options) {
if (this[kStartedReading]) {
throw new Error('Failed to pipe. The response has been emitted already.');
}
if (destination instanceof http_1.ServerResponse) {
this[kServerResponsesPiped].add(destination);
}
return super.pipe(destination, options);
}
unpipe(destination) {
if (destination instanceof http_1.ServerResponse) {
this[kServerResponsesPiped].delete(destination);
}
super.unpipe(destination);
return this;
}
}
2020-06-11 09:37:37 +02:00
exports.default = Request;
/***/ }),
/***/ 948:
/***/ (function(module) {
"use strict";
/**
* Tries to execute a function and discards any error that occurs.
* @param {Function} fn - Function that might or might not throw an error.
* @returns {?*} Return-value of the function when no error occurred.
*/
module.exports = function(fn) {
try { return fn() } catch (e) {}
}
/***/ }),
/***/ 950:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const url = __webpack_require__(835);
function getProxyUrl(reqUrl) {
let usingSsl = reqUrl.protocol === 'https:';
let proxyUrl;
if (checkBypass(reqUrl)) {
return proxyUrl;
}
let proxyVar;
if (usingSsl) {
proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
}
else {
proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
}
if (proxyVar) {
proxyUrl = url.parse(proxyVar);
}
return proxyUrl;
}
exports.getProxyUrl = getProxyUrl;
function checkBypass(reqUrl) {
if (!reqUrl.hostname) {
return false;
}
let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
if (!noProxy) {
return false;
}
// Determine the request port
let reqPort;
if (reqUrl.port) {
reqPort = Number(reqUrl.port);
}
else if (reqUrl.protocol === 'http:') {
reqPort = 80;
}
else if (reqUrl.protocol === 'https:') {
reqPort = 443;
}
// Format the request hostname and hostname with port
let upperReqHosts = [reqUrl.hostname.toUpperCase()];
if (typeof reqPort === 'number') {
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
}
// Compare request host against noproxy
for (let upperNoProxyItem of noProxy
.split(',')
.map(x => x.trim().toUpperCase())
.filter(x => x)) {
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
return true;
}
}
return false;
}
exports.checkBypass = checkBypass;
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 952:
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = __webpack_require__(614);
const getStream = __webpack_require__(145);
const PCancelable = __webpack_require__(557);
const calculate_retry_delay_1 = __webpack_require__(927);
const types_1 = __webpack_require__(36);
const core_1 = __webpack_require__(468);
exports.PromisableRequest = core_1.default;
const proxy_events_1 = __webpack_require__(628);
const proxiedRequestEvents = [
'request',
'response',
'redirect',
'uploadProgress',
'downloadProgress'
];
function asPromise(options) {
let retryCount = 0;
let globalRequest;
let globalResponse;
const emitter = new events_1.EventEmitter();
const promise = new PCancelable((resolve, _reject, onCancel) => {
const makeRequest = () => {
// Support retries
// `options.throwHttpErrors` needs to be always true,
// so the HTTP errors are caught and the request is retried.
// The error is **eventually** thrown if the user value is true.
const { throwHttpErrors } = options;
if (!throwHttpErrors) {
options.throwHttpErrors = true;
}
// Note from @szmarczak: I think we should use `request.options` instead of the local options
const request = new core_1.default(options.url, options);
request._noPipe = true;
onCancel(() => request.destroy());
const reject = async (error) => {
try {
for (const hook of options.hooks.beforeError) {
// eslint-disable-next-line no-await-in-loop
error = await hook(error);
}
}
catch (error_) {
_reject(new types_1.RequestError(error_.message, error_, request));
return;
}
_reject(error);
};
globalRequest = request;
const onResponse = async (response) => {
response.retryCount = retryCount;
if (response.request.aborted) {
// Canceled while downloading - will throw a `CancelError` or `TimeoutError` error
return;
}
const isOk = () => {
const { statusCode } = response;
const limitStatusCode = options.followRedirect ? 299 : 399;
return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
};
// Download body
let rawBody;
try {
rawBody = await getStream.buffer(request);
response.rawBody = rawBody;
}
catch (_) {
// The same error is caught below.
// See request.once('error')
return;
}
// Parse body
try {
response.body = core_1.parseBody(response, options.responseType, options.parseJson, options.encoding);
}
catch (error) {
// Fallback to `utf8`
response.body = rawBody.toString();
if (isOk()) {
// TODO: Call `request._beforeError`, see https://github.com/nodejs/node/issues/32995
reject(error);
return;
}
}
try {
for (const [index, hook] of options.hooks.afterResponse.entries()) {
// @ts-ignore TS doesn't notice that CancelableRequest is a Promise
// eslint-disable-next-line no-await-in-loop
response = await hook(response, async (updatedOptions) => {
const typedOptions = core_1.default.normalizeArguments(undefined, {
...updatedOptions,
retry: {
calculateDelay: () => 0
},
throwHttpErrors: false,
resolveBodyOnly: false
}, options);
// Remove any further hooks for that request, because we'll call them anyway.
// The loop continues. We don't want duplicates (asPromise recursion).
typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index);
for (const hook of typedOptions.hooks.beforeRetry) {
// eslint-disable-next-line no-await-in-loop
await hook(typedOptions);
}
const promise = asPromise(typedOptions);
onCancel(() => {
promise.catch(() => { });
promise.cancel();
});
return promise;
});
}
}
catch (error) {
// TODO: Call `request._beforeError`, see https://github.com/nodejs/node/issues/32995
reject(new types_1.RequestError(error.message, error, request));
return;
}
if (throwHttpErrors && !isOk()) {
reject(new types_1.HTTPError(response));
return;
}
globalResponse = response;
resolve(options.resolveBodyOnly ? response.body : response);
};
request.once('response', onResponse);
request.once('error', async (error) => {
if (promise.isCanceled) {
return;
}
if (!request.options) {
reject(error);
return;
}
request.off('response', onResponse);
let backoff;
retryCount++;
try {
backoff = await options.retry.calculateDelay({
attemptCount: retryCount,
retryOptions: options.retry,
error,
computedValue: calculate_retry_delay_1.default({
attemptCount: retryCount,
retryOptions: options.retry,
error,
computedValue: 0
})
});
}
catch (error_) {
// Don't emit the `response` event
request.destroy();
reject(new types_1.RequestError(error_.message, error, request));
return;
}
if (backoff) {
// Don't emit the `response` event
request.destroy();
const retry = async () => {
options.throwHttpErrors = throwHttpErrors;
try {
for (const hook of options.hooks.beforeRetry) {
// eslint-disable-next-line no-await-in-loop
await hook(options, error, retryCount);
}
}
catch (error_) {
// Don't emit the `response` event
request.destroy();
reject(new types_1.RequestError(error_.message, error, request));
return;
}
makeRequest();
};
setTimeout(retry, backoff);
return;
}
// The retry has not been made
retryCount--;
if (error instanceof types_1.HTTPError) {
// The error will be handled by the `response` event
onResponse(request._response);
return;
}
// Don't emit the `response` event
request.destroy();
reject(error);
});
proxy_events_1.default(request, emitter, proxiedRequestEvents);
};
makeRequest();
});
promise.on = (event, fn) => {
emitter.on(event, fn);
return promise;
};
const shortcut = (responseType) => {
const newPromise = (async () => {
// Wait until downloading has ended
await promise;
return core_1.parseBody(globalResponse, responseType, options.parseJson, options.encoding);
})();
Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
return newPromise;
};
promise.json = () => {
if (!globalRequest.writableFinished && options.headers.accept === undefined) {
options.headers.accept = 'application/json';
}
return shortcut('json');
};
promise.buffer = () => shortcut('buffer');
promise.text = () => shortcut('text');
return promise;
}
exports.default = asPromise;
__export(__webpack_require__(36));
/***/ }),
/***/ 954:
/***/ (function(module) {
module.exports = validateAuth;
function validateAuth(auth) {
if (typeof auth === "string") {
return;
}
if (typeof auth === "function") {
return;
}
if (auth.username && auth.password) {
return;
}
if (auth.clientId && auth.clientSecret) {
return;
}
throw new Error(`Invalid "auth" option: ${JSON.stringify(auth)}`);
}
/***/ }),
/***/ 955:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const path = __webpack_require__(622);
const childProcess = __webpack_require__(129);
const crossSpawn = __webpack_require__(20);
const stripEof = __webpack_require__(768);
const npmRunPath = __webpack_require__(621);
const isStream = __webpack_require__(323);
2020-06-11 09:37:37 +02:00
const _getStream = __webpack_require__(79);
const pFinally = __webpack_require__(697);
const onExit = __webpack_require__(260);
const errname = __webpack_require__(427);
const stdio = __webpack_require__(168);
const TEN_MEGABYTES = 1000 * 1000 * 10;
function handleArgs(cmd, args, opts) {
let parsed;
opts = Object.assign({
extendEnv: true,
env: {}
}, opts);
if (opts.extendEnv) {
opts.env = Object.assign({}, process.env, opts.env);
}
if (opts.__winShell === true) {
delete opts.__winShell;
parsed = {
command: cmd,
args,
options: opts,
file: cmd,
original: {
cmd,
args
}
};
} else {
parsed = crossSpawn._parse(cmd, args, opts);
}
opts = Object.assign({
maxBuffer: TEN_MEGABYTES,
buffer: true,
stripEof: true,
preferLocal: true,
localDir: parsed.options.cwd || process.cwd(),
encoding: 'utf8',
reject: true,
cleanup: true
}, parsed.options);
opts.stdio = stdio(opts);
if (opts.preferLocal) {
opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));
}
if (opts.detached) {
// #115
opts.cleanup = false;
}
if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {
// #116
parsed.args.unshift('/q');
}
return {
cmd: parsed.command,
args: parsed.args,
opts,
parsed
};
}
function handleInput(spawned, input) {
if (input === null || input === undefined) {
return;
}
if (isStream(input)) {
input.pipe(spawned.stdin);
} else {
spawned.stdin.end(input);
}
}
function handleOutput(opts, val) {
if (val && opts.stripEof) {
val = stripEof(val);
}
return val;
}
function handleShell(fn, cmd, opts) {
let file = '/bin/sh';
let args = ['-c', cmd];
opts = Object.assign({}, opts);
if (process.platform === 'win32') {
opts.__winShell = true;
file = process.env.comspec || 'cmd.exe';
args = ['/s', '/c', `"${cmd}"`];
opts.windowsVerbatimArguments = true;
}
if (opts.shell) {
file = opts.shell;
delete opts.shell;
}
return fn(file, args, opts);
}
function getStream(process, stream, {encoding, buffer, maxBuffer}) {
if (!process[stream]) {
return null;
}
let ret;
if (!buffer) {
// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10
ret = new Promise((resolve, reject) => {
process[stream]
.once('end', resolve)
.once('error', reject);
});
} else if (encoding) {
ret = _getStream(process[stream], {
encoding,
maxBuffer
});
} else {
ret = _getStream.buffer(process[stream], {maxBuffer});
}
return ret.catch(err => {
err.stream = stream;
err.message = `${stream} ${err.message}`;
throw err;
});
}
function makeError(result, options) {
const {stdout, stderr} = result;
let err = result.error;
const {code, signal} = result;
const {parsed, joinedCmd} = options;
const timedOut = options.timedOut || false;
if (!err) {
let output = '';
if (Array.isArray(parsed.opts.stdio)) {
if (parsed.opts.stdio[2] !== 'inherit') {
output += output.length > 0 ? stderr : `\n${stderr}`;
}
if (parsed.opts.stdio[1] !== 'inherit') {
output += `\n${stdout}`;
}
} else if (parsed.opts.stdio !== 'inherit') {
output = `\n${stderr}${stdout}`;
}
err = new Error(`Command failed: ${joinedCmd}${output}`);
err.code = code < 0 ? errname(code) : code;
}
err.stdout = stdout;
err.stderr = stderr;
err.failed = true;
err.signal = signal || null;
err.cmd = joinedCmd;
err.timedOut = timedOut;
return err;
}
function joinCmd(cmd, args) {
let joinedCmd = cmd;
if (Array.isArray(args) && args.length > 0) {
joinedCmd += ' ' + args.join(' ');
}
return joinedCmd;
}
module.exports = (cmd, args, opts) => {
const parsed = handleArgs(cmd, args, opts);
const {encoding, buffer, maxBuffer} = parsed.opts;
const joinedCmd = joinCmd(cmd, args);
let spawned;
try {
spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);
} catch (err) {
return Promise.reject(err);
}
let removeExitHandler;
if (parsed.opts.cleanup) {
removeExitHandler = onExit(() => {
spawned.kill();
});
}
let timeoutId = null;
let timedOut = false;
const cleanup = () => {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
}
if (removeExitHandler) {
removeExitHandler();
}
};
if (parsed.opts.timeout > 0) {
timeoutId = setTimeout(() => {
timeoutId = null;
timedOut = true;
spawned.kill(parsed.opts.killSignal);
}, parsed.opts.timeout);
}
const processDone = new Promise(resolve => {
spawned.on('exit', (code, signal) => {
cleanup();
resolve({code, signal});
});
spawned.on('error', err => {
cleanup();
resolve({error: err});
});
if (spawned.stdin) {
spawned.stdin.on('error', err => {
cleanup();
resolve({error: err});
});
}
});
function destroy() {
if (spawned.stdout) {
spawned.stdout.destroy();
}
if (spawned.stderr) {
spawned.stderr.destroy();
}
}
const handlePromise = () => pFinally(Promise.all([
processDone,
getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),
getStream(spawned, 'stderr', {encoding, buffer, maxBuffer})
]).then(arr => {
const result = arr[0];
result.stdout = arr[1];
result.stderr = arr[2];
if (result.error || result.code !== 0 || result.signal !== null) {
const err = makeError(result, {
joinedCmd,
parsed,
timedOut
});
// TODO: missing some timeout logic for killed
// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
// err.killed = spawned.killed || killed;
err.killed = err.killed || spawned.killed;
if (!parsed.opts.reject) {
return err;
}
throw err;
}
return {
stdout: handleOutput(parsed.opts, result.stdout),
stderr: handleOutput(parsed.opts, result.stderr),
code: 0,
failed: false,
killed: false,
signal: null,
cmd: joinedCmd,
timedOut: false
};
}), destroy);
crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);
handleInput(spawned, parsed.opts.input);
spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);
spawned.catch = onrejected => handlePromise().catch(onrejected);
return spawned;
};
// TODO: set `stderr: 'ignore'` when that option is implemented
module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);
// TODO: set `stdout: 'ignore'` when that option is implemented
module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);
module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);
module.exports.sync = (cmd, args, opts) => {
const parsed = handleArgs(cmd, args, opts);
const joinedCmd = joinCmd(cmd, args);
if (isStream(parsed.opts.input)) {
throw new TypeError('The `input` option cannot be a stream in sync mode');
}
const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);
result.code = result.status;
if (result.error || result.status !== 0 || result.signal !== null) {
const err = makeError(result, {
joinedCmd,
parsed
});
if (!parsed.opts.reject) {
return err;
}
throw err;
}
return {
stdout: handleOutput(parsed.opts, result.stdout),
stderr: handleOutput(parsed.opts, result.stderr),
code: 0,
failed: false,
signal: null,
cmd: joinedCmd,
timedOut: false
};
};
module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);
/***/ }),
/***/ 966:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
2020-06-11 09:37:37 +02:00
const {PassThrough: PassThroughStream} = __webpack_require__(413);
module.exports = options => {
2020-06-11 09:37:37 +02:00
options = {...options};
const {array} = options;
let {encoding} = options;
2020-06-11 09:37:37 +02:00
const isBuffer = encoding === 'buffer';
let objectMode = false;
if (array) {
2020-06-11 09:37:37 +02:00
objectMode = !(encoding || isBuffer);
} else {
encoding = encoding || 'utf8';
}
2020-06-11 09:37:37 +02:00
if (isBuffer) {
encoding = null;
}
2020-06-11 09:37:37 +02:00
const stream = new PassThroughStream({objectMode});
if (encoding) {
stream.setEncoding(encoding);
}
2020-06-11 09:37:37 +02:00
let length = 0;
const chunks = [];
stream.on('data', chunk => {
2020-06-11 09:37:37 +02:00
chunks.push(chunk);
if (objectMode) {
2020-06-11 09:37:37 +02:00
length = chunks.length;
} else {
2020-06-11 09:37:37 +02:00
length += chunk.length;
}
});
stream.getBufferedValue = () => {
if (array) {
2020-06-11 09:37:37 +02:00
return chunks;
}
2020-06-11 09:37:37 +02:00
return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
};
2020-06-11 09:37:37 +02:00
stream.getBufferedLength = () => length;
return stream;
};
/***/ }),
/***/ 969:
/***/ (function(module, __unusedexports, __webpack_require__) {
var wrappy = __webpack_require__(11)
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
Object.defineProperty(Function.prototype, 'onceStrict', {
value: function () {
return onceStrict(this)
},
configurable: true
})
})
function once (fn) {
var f = function () {
if (f.called) return f.value
f.called = true
return f.value = fn.apply(this, arguments)
}
f.called = false
return f
}
function onceStrict (fn) {
var f = function () {
if (f.called)
throw new Error(f.onceError)
f.called = true
return f.value = fn.apply(this, arguments)
}
var name = fn.name || 'Function wrapped with `once`'
f.onceError = name + " shouldn't be called more than once"
f.called = false
return f
}
2020-06-11 09:37:37 +02:00
/***/ }),
/***/ 988:
/***/ (function(module, __unusedexports, __webpack_require__) {
"use strict";
const http = __webpack_require__(605);
const https = __webpack_require__(211);
const resolveALPN = __webpack_require__(524);
const QuickLRU = __webpack_require__(290);
const Http2ClientRequest = __webpack_require__(181);
const calculateServerName = __webpack_require__(751);
const urlToOptions = __webpack_require__(507);
const cache = new QuickLRU({maxSize: 100});
const queue = new Map();
const installSocket = (agent, socket, options) => {
socket._httpMessage = {shouldKeepAlive: true};
const onFree = () => {
agent.emit('free', socket, options);
};
socket.on('free', onFree);
const onClose = () => {
agent.removeSocket(socket, options);
};
socket.on('close', onClose);
const onRemove = () => {
agent.removeSocket(socket, options);
socket.off('close', onClose);
socket.off('free', onFree);
socket.off('agentRemove', onRemove);
};
socket.on('agentRemove', onRemove);
agent.emit('free', socket, options);
};
const resolveProtocol = async options => {
const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
if (!cache.has(name)) {
if (queue.has(name)) {
const result = await queue.get(name);
return result.alpnProtocol;
}
const {path, agent} = options;
options.path = options.socketPath;
const resultPromise = resolveALPN(options);
queue.set(name, resultPromise);
try {
const {socket, alpnProtocol} = await resultPromise;
cache.set(name, alpnProtocol);
options.path = path;
if (alpnProtocol === 'h2') {
// https://github.com/nodejs/node/issues/33343
socket.destroy();
} else {
const {globalAgent} = https;
const defaultCreateConnection = https.Agent.prototype.createConnection;
if (agent) {
if (agent.createConnection === defaultCreateConnection) {
installSocket(agent, socket, options);
} else {
socket.destroy();
}
} else if (globalAgent.createConnection === defaultCreateConnection) {
installSocket(globalAgent, socket, options);
} else {
socket.destroy();
}
}
queue.delete(name);
return alpnProtocol;
} catch (error) {
queue.delete(name);
throw error;
}
}
return cache.get(name);
};
module.exports = async (input, options, callback) => {
if (typeof input === 'string' || input instanceof URL) {
input = urlToOptions(new URL(input));
}
if (typeof options === 'function') {
callback = options;
options = undefined;
}
options = {
ALPNProtocols: ['h2', 'http/1.1'],
protocol: 'https:',
...input,
...options,
resolveSocket: true
};
const isHttps = options.protocol === 'https:';
const agents = options.agent;
options.host = options.hostname || options.host || 'localhost';
options.session = options.tlsSession;
options.servername = options.servername || calculateServerName(options);
options.port = options.port || (isHttps ? 443 : 80);
options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;
if (agents) {
if (agents.addRequest) {
throw new Error('The `options.agent` object can contain only `http`, `https` or `http2` properties');
}
options.agent = agents[isHttps ? 'https' : 'http'];
}
if (isHttps) {
const protocol = await resolveProtocol(options);
if (protocol === 'h2') {
if (agents) {
options.agent = agents.http2;
}
return new Http2ClientRequest(options, callback);
}
}
return http.request(options, callback);
};
module.exports.protocolCache = cache;
/***/ })
/******/ });