repo-file-sync-action/dist/index.js

22313 lines
887 KiB
JavaScript
Raw Normal View History

2021-01-08 20:47:49 +00:00
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ 7351:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
2021-01-08 20:47:49 +00:00
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
2021-01-08 20:47:49 +00:00
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.issue = exports.issueCommand = void 0;
2021-12-19 20:39:50 +00:00
const os = __importStar(__nccwpck_require__(2037));
2021-01-08 20:47:49 +00:00
const utils_1 = __nccwpck_require__(5278);
/**
* Commands
*
* Command Format:
* ::name key=value,key=value::message
*
* Examples:
* ::warning::This is the message
* ::set-env name=MY_VAR::some value
*/
function issueCommand(command, properties, message) {
const cmd = new Command(command, properties, message);
process.stdout.write(cmd.toString() + os.EOL);
}
exports.issueCommand = issueCommand;
function issue(name, message = '') {
issueCommand(name, {}, message);
}
exports.issue = issue;
const CMD_STRING = '::';
class Command {
constructor(command, properties, message) {
if (!command) {
command = 'missing.command';
}
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)}`;
}
}
}
}
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
return cmdStr;
}
}
function escapeData(s) {
return utils_1.toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A');
}
function escapeProperty(s) {
return utils_1.toCommandValue(s)
.replace(/%/g, '%25')
.replace(/\r/g, '%0D')
.replace(/\n/g, '%0A')
.replace(/:/g, '%3A')
.replace(/,/g, '%2C');
}
//# sourceMappingURL=command.js.map
/***/ }),
/***/ 2186:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
2021-01-08 20:47:49 +00:00
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());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-10-04 00:39:34 +00:00
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
2021-01-08 20:47:49 +00:00
const command_1 = __nccwpck_require__(7351);
const file_command_1 = __nccwpck_require__(717);
const utils_1 = __nccwpck_require__(5278);
2021-12-19 20:39:50 +00:00
const os = __importStar(__nccwpck_require__(2037));
const path = __importStar(__nccwpck_require__(1017));
2021-10-04 00:39:34 +00:00
const oidc_utils_1 = __nccwpck_require__(8041);
2021-01-08 20:47:49 +00:00
/**
* 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 = utils_1.toCommandValue(val);
process.env[name] = convertedVal;
const filePath = process.env['GITHUB_ENV'] || '';
if (filePath) {
const delimiter = '_GitHubActionsFileCommandDelimeter_';
const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
file_command_1.issueCommand('ENV', commandValue);
}
else {
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) {
const filePath = process.env['GITHUB_PATH'] || '';
if (filePath) {
file_command_1.issueCommand('PATH', inputPath);
}
else {
command_1.issueCommand('add-path', {}, inputPath);
}
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
}
exports.addPath = addPath;
/**
* Gets the value of an input.
* Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
* Returns an empty string if the value is not defined.
2021-01-08 20:47:49 +00:00
*
* @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}`);
}
if (options && options.trimWhitespace === false) {
return val;
}
2021-01-08 20:47:49 +00:00
return val.trim();
}
exports.getInput = getInput;
2021-06-11 09:32:56 +00:00
/**
* Gets the values of an multiline input. Each value is also trimmed.
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns string[]
*
*/
function getMultilineInput(name, options) {
const inputs = getInput(name, options)
.split('\n')
.filter(x => x !== '');
return inputs;
}
exports.getMultilineInput = getMultilineInput;
/**
* Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
* Support boolean input list: `true | True | TRUE | false | False | FALSE` .
* The return value is also in boolean type.
* ref: https://yaml.org/spec/1.2/spec.html#id2804923
*
* @param name name of the input to get
* @param options optional. See InputOptions.
* @returns boolean
*/
function getBooleanInput(name, options) {
const trueValue = ['true', 'True', 'TRUE'];
const falseValue = ['false', 'False', 'FALSE'];
const val = getInput(name, options);
if (trueValue.includes(val))
return true;
if (falseValue.includes(val))
return false;
throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
}
exports.getBooleanInput = getBooleanInput;
2021-01-08 20:47:49 +00:00
/**
* 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) {
2021-04-16 13:23:55 +00:00
process.stdout.write(os.EOL);
2021-01-08 20:47:49 +00:00
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()
2021-09-07 09:00:42 +00:00
* @param properties optional properties to add to the annotation.
2021-01-08 20:47:49 +00:00
*/
2021-09-07 09:00:42 +00:00
function error(message, properties = {}) {
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
2021-01-08 20:47:49 +00:00
}
exports.error = error;
/**
2021-09-07 09:00:42 +00:00
* Adds a warning issue
2021-01-08 20:47:49 +00:00
* @param message warning issue message. Errors will be converted to string via toString()
2021-09-07 09:00:42 +00:00
* @param properties optional properties to add to the annotation.
2021-01-08 20:47:49 +00:00
*/
2021-09-07 09:00:42 +00:00
function warning(message, properties = {}) {
command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
2021-01-08 20:47:49 +00:00
}
exports.warning = warning;
2021-09-07 09:00:42 +00:00
/**
* Adds a notice issue
* @param message notice issue message. Errors will be converted to string via toString()
* @param properties optional properties to add to the annotation.
*/
function notice(message, properties = {}) {
command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
}
exports.notice = notice;
2021-01-08 20:47:49 +00:00
/**
* 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;
2021-10-04 00:39:34 +00:00
function getIDToken(aud) {
return __awaiter(this, void 0, void 0, function* () {
return yield oidc_utils_1.OidcClient.getIDToken(aud);
});
}
exports.getIDToken = getIDToken;
2021-01-08 20:47:49 +00:00
//# sourceMappingURL=core.js.map
/***/ }),
/***/ 717:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
// For internal use, subject to change.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
2021-01-08 20:47:49 +00:00
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
2021-01-08 20:47:49 +00:00
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.issueCommand = void 0;
2021-01-08 20:47:49 +00:00
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
2021-12-19 20:39:50 +00:00
const fs = __importStar(__nccwpck_require__(7147));
const os = __importStar(__nccwpck_require__(2037));
2021-01-08 20:47:49 +00:00
const utils_1 = __nccwpck_require__(5278);
function issueCommand(command, message) {
const filePath = process.env[`GITHUB_${command}`];
if (!filePath) {
throw new Error(`Unable to find environment variable for file command ${command}`);
}
if (!fs.existsSync(filePath)) {
throw new Error(`Missing file at path: ${filePath}`);
}
fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
encoding: 'utf8'
});
}
exports.issueCommand = issueCommand;
//# sourceMappingURL=file-command.js.map
/***/ }),
2021-10-04 00:39:34 +00:00
/***/ 8041:
/***/ (function(__unused_webpack_module, exports, __nccwpck_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());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.OidcClient = void 0;
const http_client_1 = __nccwpck_require__(9925);
const auth_1 = __nccwpck_require__(3702);
const core_1 = __nccwpck_require__(2186);
class OidcClient {
static createHttpClient(allowRetry = true, maxRetry = 10) {
const requestOptions = {
allowRetries: allowRetry,
maxRetries: maxRetry
};
return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
}
static getRequestToken() {
const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
if (!token) {
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
}
return token;
}
static getIDTokenUrl() {
const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
if (!runtimeUrl) {
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
}
return runtimeUrl;
}
static getCall(id_token_url) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const httpclient = OidcClient.createHttpClient();
const res = yield httpclient
.getJson(id_token_url)
.catch(error => {
throw new Error(`Failed to get ID Token. \n
Error Code : ${error.statusCode}\n
Error Message: ${error.result.message}`);
});
const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
if (!id_token) {
throw new Error('Response json body do not have ID Token field');
}
return id_token;
});
}
static getIDToken(audience) {
return __awaiter(this, void 0, void 0, function* () {
try {
// New ID Token is requested from action service
let id_token_url = OidcClient.getIDTokenUrl();
if (audience) {
const encodedAudience = encodeURIComponent(audience);
id_token_url = `${id_token_url}&audience=${encodedAudience}`;
}
core_1.debug(`ID token url is ${id_token_url}`);
const id_token = yield OidcClient.getCall(id_token_url);
core_1.setSecret(id_token);
return id_token;
}
catch (error) {
throw new Error(`Error message: ${error.message}`);
}
});
}
}
exports.OidcClient = OidcClient;
//# sourceMappingURL=oidc-utils.js.map
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 5278:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-09-07 09:00:42 +00:00
exports.toCommandProperties = exports.toCommandValue = void 0;
2021-01-08 20:47:49 +00:00
/**
* Sanitizes an input into a string so it can be passed into issueCommand safely
* @param input input to sanitize into a string
*/
function toCommandValue(input) {
if (input === null || input === undefined) {
return '';
}
else if (typeof input === 'string' || input instanceof String) {
return input;
}
return JSON.stringify(input);
}
exports.toCommandValue = toCommandValue;
2021-09-07 09:00:42 +00:00
/**
*
* @param annotationProperties
* @returns The command properties to send with the actual annotation command
* See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
*/
function toCommandProperties(annotationProperties) {
if (!Object.keys(annotationProperties).length) {
return {};
}
return {
title: annotationProperties.title,
2021-10-04 00:39:34 +00:00
file: annotationProperties.file,
2021-09-07 09:00:42 +00:00
line: annotationProperties.startLine,
endLine: annotationProperties.endLine,
col: annotationProperties.startColumn,
endColumn: annotationProperties.endColumn
};
}
exports.toCommandProperties = toCommandProperties;
2021-01-08 20:47:49 +00:00
//# sourceMappingURL=utils.js.map
/***/ }),
/***/ 4087:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Context = void 0;
2021-12-19 20:39:50 +00:00
const fs_1 = __nccwpck_require__(7147);
const os_1 = __nccwpck_require__(2037);
2021-01-08 20:47:49 +00:00
class Context {
/**
* Hydrate the context from the environment
*/
constructor() {
var _a, _b, _c;
2021-01-08 20:47:49 +00:00
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;
this.job = process.env.GITHUB_JOB;
this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);
this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);
this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`;
this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`;
this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`;
2021-01-08 20:47:49 +00:00
}
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
/***/ }),
2021-09-04 13:50:56 +00:00
/***/ 5438:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getOctokit = exports.context = void 0;
const Context = __importStar(__nccwpck_require__(4087));
const utils_1 = __nccwpck_require__(3030);
exports.context = new Context.Context();
/**
* Returns a hydrated octokit ready to use for GitHub Actions
*
* @param token the repo PAT or GITHUB_TOKEN
* @param options other options to set
*/
function getOctokit(token, options) {
return new utils_1.GitHub(utils_1.getOctokitOptions(token, options));
}
exports.getOctokit = getOctokit;
//# sourceMappingURL=github.js.map
/***/ }),
/***/ 7914:
2021-01-08 20:47:49 +00:00
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
2021-01-08 20:47:49 +00:00
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
2021-01-08 20:47:49 +00:00
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;
2021-01-08 20:47:49 +00:00
const httpClient = __importStar(__nccwpck_require__(9925));
function getAuthString(token, options) {
if (!token && !options.auth) {
throw new Error('Parameter token or opts.auth is required');
2021-01-08 20:47:49 +00:00
}
else if (token && options.auth) {
throw new Error('Parameters token and opts.auth may not both be specified');
2021-01-08 20:47:49 +00:00
}
return typeof options.auth === 'string' ? options.auth : `token ${token}`;
}
exports.getAuthString = getAuthString;
function getProxyAgent(destinationUrl) {
const hc = new httpClient.HttpClient();
return hc.getAgent(destinationUrl);
}
exports.getProxyAgent = getProxyAgent;
function getApiBaseUrl() {
return process.env['GITHUB_API_URL'] || 'https://api.github.com';
2021-01-08 20:47:49 +00:00
}
exports.getApiBaseUrl = getApiBaseUrl;
//# sourceMappingURL=utils.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 3030:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
2021-01-08 20:47:49 +00:00
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
2021-01-08 20:47:49 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getOctokitOptions = exports.GitHub = exports.context = void 0;
const Context = __importStar(__nccwpck_require__(4087));
const Utils = __importStar(__nccwpck_require__(7914));
// octokit + plugins
const core_1 = __nccwpck_require__(6762);
const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044);
const plugin_paginate_rest_1 = __nccwpck_require__(4193);
exports.context = new Context.Context();
const baseUrl = Utils.getApiBaseUrl();
const defaults = {
baseUrl,
request: {
agent: Utils.getProxyAgent(baseUrl)
}
};
exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(defaults);
2021-01-08 20:47:49 +00:00
/**
* Convience function to correctly format Octokit Options to pass into the constructor.
2021-01-08 20:47:49 +00:00
*
* @param token the repo PAT or GITHUB_TOKEN
* @param options other options to set
2021-01-08 20:47:49 +00:00
*/
function getOctokitOptions(token, options) {
const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller
// Auth
const auth = Utils.getAuthString(token, opts);
if (auth) {
opts.auth = auth;
2021-01-08 20:47:49 +00:00
}
return opts;
2021-01-08 20:47:49 +00:00
}
exports.getOctokitOptions = getOctokitOptions;
//# sourceMappingURL=utils.js.map
2021-01-08 20:47:49 +00:00
2021-10-04 00:39:34 +00:00
/***/ }),
/***/ 3702:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
class BasicCredentialHandler {
constructor(username, password) {
this.username = username;
this.password = password;
}
prepareRequest(options) {
options.headers['Authorization'] =
'Basic ' +
Buffer.from(this.username + ':' + this.password).toString('base64');
}
// This handler cannot handle 401
canHandleAuthentication(response) {
return false;
}
handleAuthentication(httpClient, requestInfo, objs) {
return null;
}
}
exports.BasicCredentialHandler = BasicCredentialHandler;
class BearerCredentialHandler {
constructor(token) {
this.token = token;
}
// currently implements pre-authorization
// TODO: support preAuth = false where it hooks on 401
prepareRequest(options) {
options.headers['Authorization'] = 'Bearer ' + this.token;
}
// This handler cannot handle 401
canHandleAuthentication(response) {
return false;
}
handleAuthentication(httpClient, requestInfo, objs) {
return null;
}
}
exports.BearerCredentialHandler = BearerCredentialHandler;
class PersonalAccessTokenCredentialHandler {
constructor(token) {
this.token = token;
}
// currently implements pre-authorization
// TODO: support preAuth = false where it hooks on 401
prepareRequest(options) {
options.headers['Authorization'] =
'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
}
// This handler cannot handle 401
canHandleAuthentication(response) {
return false;
}
handleAuthentication(httpClient, requestInfo, objs) {
return null;
}
}
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 9925:
2021-01-08 20:47:49 +00:00
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-12-19 20:39:50 +00:00
const http = __nccwpck_require__(3685);
const https = __nccwpck_require__(5687);
const pm = __nccwpck_require__(6443);
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 = {}));
2021-01-08 20:47:49 +00:00
/**
* 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
2021-01-08 20:47:49 +00:00
*/
function getProxyUrl(serverUrl) {
let proxyUrl = pm.getProxyUrl(new URL(serverUrl));
return proxyUrl ? proxyUrl.href : '';
2021-01-08 20:47:49 +00:00
}
exports.getProxyUrl = getProxyUrl;
const HttpRedirectCodes = [
HttpCodes.MovedPermanently,
HttpCodes.ResourceMoved,
HttpCodes.SeeOther,
HttpCodes.TemporaryRedirect,
HttpCodes.PermanentRedirect
2021-01-08 20:47:49 +00:00
];
const HttpResponseRetryCodes = [
HttpCodes.BadGateway,
HttpCodes.ServiceUnavailable,
HttpCodes.GatewayTimeout
];
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
const ExponentialBackoffCeiling = 10;
const ExponentialBackoffTimeSlice = 5;
class HttpClientError extends Error {
constructor(message, statusCode) {
super(message);
this.name = 'HttpClientError';
this.statusCode = statusCode;
Object.setPrototypeOf(this, HttpClientError.prototype);
2021-01-08 20:47:49 +00:00
}
}
exports.HttpClientError = HttpClientError;
class HttpClientResponse {
constructor(message) {
this.message = message;
2021-01-08 20:47:49 +00:00
}
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());
});
});
2021-01-08 20:47:49 +00:00
}
}
exports.HttpClientResponse = HttpClientResponse;
function isHttps(requestUrl) {
let parsedUrl = new URL(requestUrl);
return parsedUrl.protocol === 'https:';
2021-01-08 20:47:49 +00:00
}
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;
2021-01-08 20:47:49 +00:00
}
this._socketTimeout = requestOptions.socketTimeout;
if (requestOptions.allowRedirects != null) {
this._allowRedirects = requestOptions.allowRedirects;
2021-01-08 20:47:49 +00:00
}
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;
2021-01-08 20:47:49 +00:00
}
}
}
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 = new URL(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 = new URL(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 = new URL(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 = __nccwpck_require__(4294);
}
const agentOptions = {
maxSockets: maxSockets,
keepAlive: this._keepAlive,
proxy: {
...((proxyUrl.username || proxyUrl.password) && {
proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
}),
2021-01-08 20:47:49 +00:00
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 HttpClientError(msg, statusCode);
err.result = response.result;
reject(err);
}
else {
resolve(response);
}
});
}
}
exports.HttpClient = HttpClient;
2021-04-16 13:23:55 +00:00
/***/ }),
2021-04-16 13:23:55 +00:00
/***/ 6443:
/***/ ((__unused_webpack_module, exports) => {
2021-04-16 13:23:55 +00:00
"use strict";
2021-04-16 13:23:55 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
function getProxyUrl(reqUrl) {
let usingSsl = reqUrl.protocol === 'https:';
let proxyUrl;
if (checkBypass(reqUrl)) {
return proxyUrl;
2021-04-16 13:23:55 +00:00
}
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 = new URL(proxyVar);
}
return proxyUrl;
2021-04-16 13:23:55 +00:00
}
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;
2021-04-16 13:23:55 +00:00
}
exports.checkBypass = checkBypass;
2021-04-16 13:23:55 +00:00
/***/ }),
/***/ 334:
/***/ ((__unused_webpack_module, exports) => {
2021-04-16 13:23:55 +00:00
"use strict";
2021-04-16 13:23:55 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-04-16 13:23:55 +00:00
async function auth(token) {
const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
return {
type: "token",
token: token,
tokenType
};
}
2021-04-16 13:23:55 +00:00
/**
* 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}`;
}
2021-04-16 13:23:55 +00:00
return `token ${token}`;
}
2021-04-16 13:23:55 +00:00
async function hook(token, request, route, parameters) {
const endpoint = request.endpoint.merge(route, parameters);
endpoint.headers.authorization = withAuthorizationPrefix(token);
return request(endpoint);
}
2021-04-16 13:23:55 +00:00
const createTokenAuth = function createTokenAuth(token) {
if (!token) {
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
}
2021-04-16 13:23:55 +00:00
if (typeof token !== "string") {
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
}
2021-04-16 13:23:55 +00:00
token = token.replace(/^(token|bearer) +/i, "");
return Object.assign(auth.bind(null, token), {
hook: hook.bind(null, token)
});
};
2021-04-16 13:23:55 +00:00
exports.createTokenAuth = createTokenAuth;
//# sourceMappingURL=index.js.map
2021-04-16 13:23:55 +00:00
/***/ }),
2021-04-16 13:23:55 +00:00
/***/ 6762:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-04-16 13:23:55 +00:00
"use strict";
2021-04-16 13:23:55 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-04-16 13:23:55 +00:00
var universalUserAgent = __nccwpck_require__(5030);
2021-12-19 20:39:50 +00:00
var beforeAfterHook = __nccwpck_require__(3682);
var request = __nccwpck_require__(6039);
var graphql = __nccwpck_require__(8467);
var authToken = __nccwpck_require__(334);
2021-04-16 13:23:55 +00:00
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
2021-04-16 13:23:55 +00:00
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
2021-04-16 13:23:55 +00:00
return target;
}
2021-04-16 13:23:55 +00:00
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
2021-04-16 13:23:55 +00:00
var target = _objectWithoutPropertiesLoose(source, excluded);
2021-04-16 13:23:55 +00:00
var key, i;
2021-04-16 13:23:55 +00:00
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2021-04-16 13:23:55 +00:00
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
2021-04-16 13:23:55 +00:00
}
}
return target;
2021-04-16 13:23:55 +00:00
}
2022-03-21 00:47:21 +00:00
const VERSION = "3.6.0";
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const _excluded = ["authStrategy"];
class Octokit {
constructor(options = {}) {
const hook = new beforeAfterHook.Collection();
const requestDefaults = {
baseUrl: request.request.endpoint.DEFAULTS.baseUrl,
headers: {},
request: Object.assign({}, options.request, {
// @ts-ignore internal usage only, no need to type
hook: hook.bind(null, "request")
}),
mediaType: {
previews: [],
format: ""
}
}; // prepend default user agent with `options.userAgent` if set
2021-04-16 13:23:55 +00:00
requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" ");
2021-04-16 13:23:55 +00:00
if (options.baseUrl) {
requestDefaults.baseUrl = options.baseUrl;
}
2021-04-16 13:23:55 +00:00
if (options.previews) {
requestDefaults.mediaType.previews = options.previews;
}
2021-04-16 13:23:55 +00:00
if (options.timeZone) {
requestDefaults.headers["time-zone"] = options.timeZone;
}
2021-04-16 13:23:55 +00:00
this.request = request.request.defaults(requestDefaults);
this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults);
this.log = Object.assign({
debug: () => {},
info: () => {},
warn: console.warn.bind(console),
error: console.error.bind(console)
}, options.log);
this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
// is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered.
// (2) If only `options.auth` is set, use the default token authentication strategy.
// (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.
// TODO: type `options.auth` based on `options.authStrategy`.
if (!options.authStrategy) {
if (!options.auth) {
// (1)
this.auth = async () => ({
type: "unauthenticated"
});
} else {
// (2)
const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯
2021-04-16 13:23:55 +00:00
hook.wrap("request", auth.hook);
this.auth = auth;
}
} else {
const {
authStrategy
} = options,
2021-12-19 20:39:50 +00:00
otherOptions = _objectWithoutProperties(options, _excluded);
const auth = authStrategy(Object.assign({
request: this.request,
log: this.log,
// we pass the current octokit instance as well as its constructor options
// to allow for authentication strategies that return a new octokit instance
// that shares the same internal state as the current one. The original
// requirement for this was the "event-octokit" authentication strategy
// of https://github.com/probot/octokit-auth-probot.
octokit: this,
octokitOptions: otherOptions
}, options.auth)); // @ts-ignore ¯\_(ツ)_/¯
hook.wrap("request", auth.hook);
this.auth = auth;
} // apply plugins
// https://stackoverflow.com/a/16345172
const classConstructor = this.constructor;
classConstructor.plugins.forEach(plugin => {
Object.assign(this, plugin(this, options));
});
2021-04-16 13:23:55 +00:00
}
static defaults(defaults) {
const OctokitWithDefaults = class extends this {
constructor(...args) {
const options = args[0] || {};
2021-04-16 13:23:55 +00:00
if (typeof defaults === "function") {
super(defaults(options));
return;
}
2021-04-16 13:23:55 +00:00
super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {
userAgent: `${options.userAgent} ${defaults.userAgent}`
} : null));
}
};
return OctokitWithDefaults;
2021-04-16 13:23:55 +00:00
}
/**
* Attach a plugin (or many) to your Octokit instance.
*
* @example
* const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
*/
2021-04-16 13:23:55 +00:00
static plugin(...newPlugins) {
var _a;
const currentPlugins = this.plugins;
const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a);
return NewOctokit;
2021-04-16 13:23:55 +00:00
}
}
Octokit.VERSION = VERSION;
Octokit.plugins = [];
2021-04-16 13:23:55 +00:00
exports.Octokit = Octokit;
//# sourceMappingURL=index.js.map
2021-04-16 13:23:55 +00:00
/***/ }),
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
/***/ 9910:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
"use strict";
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
var deprecation = __nccwpck_require__(8932);
var once = _interopDefault(__nccwpck_require__(1223));
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const logOnceCode = once(deprecation => console.warn(deprecation));
const logOnceHeaders = once(deprecation => console.warn(deprecation));
/**
* Error with extra properties to help with debugging
*/
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
class RequestError extends Error {
constructor(message, statusCode, options) {
super(message); // Maintains proper stack trace (only available on V8)
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
/* istanbul ignore next */
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
this.name = "HttpError";
this.status = statusCode;
let headers;
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if ("headers" in options && typeof options.headers !== "undefined") {
headers = options.headers;
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if ("response" in options) {
this.response = options.response;
headers = options.response.headers;
} // redact request credentials without mutating original request options
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const requestCopy = Object.assign({}, options.request);
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if (options.request.headers.authorization) {
requestCopy.headers = Object.assign({}, options.request.headers, {
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
});
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00: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; // deprecations
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
Object.defineProperty(this, "code", {
get() {
logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
return statusCode;
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
});
Object.defineProperty(this, "headers", {
get() {
logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));
return headers || {};
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
});
2021-04-16 13:23:55 +00:00
}
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
exports.RequestError = RequestError;
//# sourceMappingURL=index.js.map
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 6039:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-12-19 20:39:50 +00:00
"use strict";
2021-12-19 20:39:50 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var endpoint = __nccwpck_require__(9440);
var universalUserAgent = __nccwpck_require__(5030);
var isPlainObject = __nccwpck_require__(3287);
2022-03-21 00:47:21 +00:00
var nodeFetch = _interopDefault(__nccwpck_require__(3801));
2021-12-19 20:39:50 +00:00
var requestError = __nccwpck_require__(9910);
2022-03-21 00:47:21 +00:00
const VERSION = "5.6.3";
2021-12-19 20:39:50 +00:00
function getBufferResponse(response) {
return response.arrayBuffer();
}
function fetchWrapper(requestOptions) {
const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
requestOptions.body = JSON.stringify(requestOptions.body);
2021-04-16 13:23:55 +00:00
}
2021-12-19 20:39:50 +00:00
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.agent` type is incompatible
// see https://github.com/octokit/types.ts/pull/264
requestOptions.request)).then(async response => {
url = response.url;
status = response.status;
for (const keyAndValue of response.headers) {
headers[keyAndValue[0]] = keyAndValue[1];
}
if ("deprecation" in headers) {
const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
const deprecationLink = matches && matches.pop();
log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`);
}
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, {
response: {
url,
status,
headers,
data: undefined
},
request: requestOptions
});
}
if (status === 304) {
throw new requestError.RequestError("Not modified", status, {
response: {
url,
status,
headers,
data: await getResponseData(response)
},
request: requestOptions
});
}
if (status >= 400) {
const data = await getResponseData(response);
const error = new requestError.RequestError(toErrorMessage(data), status, {
response: {
url,
status,
headers,
data
},
request: requestOptions
});
throw error;
}
return getResponseData(response);
}).then(data => {
return {
status,
url,
headers,
data
};
}).catch(error => {
if (error instanceof requestError.RequestError) throw error;
throw new requestError.RequestError(error.message, 500, {
request: requestOptions
});
});
}
async function getResponseData(response) {
const contentType = response.headers.get("content-type");
if (/application\/json/.test(contentType)) {
return response.json();
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
return response.text();
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
return getBufferResponse(response);
}
function toErrorMessage(data) {
if (typeof data === "string") return data; // istanbul ignore else - just in case
if ("message" in data) {
if (Array.isArray(data.errors)) {
return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`;
2021-04-16 13:23:55 +00:00
}
2021-12-19 20:39:50 +00:00
return data.message;
} // istanbul ignore next - just in case
return `Unknown error: ${JSON.stringify(data)}`;
2021-04-16 13:23:55 +00:00
}
2021-12-19 20:39:50 +00:00
function withDefaults(oldEndpoint, newDefaults) {
const endpoint = oldEndpoint.defaults(newDefaults);
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const newApi = function (route, parameters) {
const endpointOptions = endpoint.merge(route, parameters);
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
if (!endpointOptions.request || !endpointOptions.request.hook) {
return fetchWrapper(endpoint.parse(endpointOptions));
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const request = (route, parameters) => {
return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
};
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
Object.assign(request, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
return endpointOptions.request.hook(request, endpointOptions);
};
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
return Object.assign(newApi, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
}
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
const request = withDefaults(endpoint.endpoint, {
headers: {
"user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
}
2021-12-19 20:39:50 +00:00
});
2021-04-16 13:23:55 +00:00
2021-12-19 20:39:50 +00:00
exports.request = request;
//# sourceMappingURL=index.js.map
2021-04-16 13:23:55 +00:00
/***/ }),
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
/***/ 3801:
/***/ ((module, exports, __nccwpck_require__) => {
2021-04-16 13:23:55 +00:00
"use strict";
2021-04-16 13:23:55 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2022-03-21 00:47:21 +00:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
var Stream = _interopDefault(__nccwpck_require__(2781));
var http = _interopDefault(__nccwpck_require__(3685));
var Url = _interopDefault(__nccwpck_require__(7310));
var whatwgUrl = _interopDefault(__nccwpck_require__(8665));
var https = _interopDefault(__nccwpck_require__(5687));
var zlib = _interopDefault(__nccwpck_require__(9796));
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
// fix for "Readable" isn't a named export issue
const Readable = Stream.Readable;
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
const BUFFER = Symbol('buffer');
const TYPE = Symbol('type');
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
class Blob {
constructor() {
this[TYPE] = '';
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
const blobParts = arguments[0];
const options = arguments[1];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const buffers = [];
let size = 0;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
}
}
2022-03-21 00:47:21 +00:00
this[BUFFER] = Buffer.concat(buffers);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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;
2022-03-21 00:47:21 +00: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);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const buffer = this[BUFFER];
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
const blob = new Blob([], { type: arguments[2] });
blob[BUFFER] = slicedBuffer;
return blob;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperties(Blob.prototype, {
size: { enumerable: true },
type: { enumerable: true },
slice: { enumerable: true }
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this.message = message;
this.type = type;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
FetchError.prototype = Object.create(Error.prototype);
FetchError.prototype.constructor = FetchError;
FetchError.prototype.name = 'FetchError';
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let convert;
try {
convert = (__nccwpck_require__(2877).convert);
} catch (e) {}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const INTERNALS = Symbol('Body internals');
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream.PassThrough;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$size = _ref.size;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let size = _ref$size === undefined ? 0 : _ref$size;
var _ref$timeout = _ref.timeout;
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
});
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Body.prototype = {
get body() {
return this[INTERNALS].body;
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get bodyUsed() {
return this[INTERNALS].disturbed;
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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
});
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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'));
}
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody.call(this).then(function (buffer) {
return buffer.toString();
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody.call(this);
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return consumeBody.call(this).then(function (buffer) {
return convertBody(buffer, _this3.headers);
});
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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 }
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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);
}
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (this[INTERNALS].disturbed) {
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this[INTERNALS].disturbed = true;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (this[INTERNALS].error) {
return Body.Promise.reject(this[INTERNALS].error);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let body = this.body;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is null
if (body === null) {
return Body.Promise.resolve(Buffer.alloc(0));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is blob
if (isBlob(body)) {
body = body.stream();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is buffer
if (Buffer.isBuffer(body)) {
return Body.Promise.resolve(body);
}
2021-04-16 13:23:55 +00:00
2022-03-21 00:47:21 +00:00
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body.Promise.resolve(Buffer.alloc(0));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return new Body.Promise(function (resolve, reject) {
let resTimeout;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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));
}
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
accumBytes += chunk.length;
accum.push(chunk);
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
body.on('end', function () {
if (abort) {
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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));
}
});
});
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* 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');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// html5
if (!res && str) {
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// html4
if (!res && str) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
if (!res) {
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
if (res) {
res.pop(); // drop last quote
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (res) {
res = /charset=(.*)/i.exec(res.pop());
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// xml
if (!res && str) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// found charset
if (res) {
charset = res.pop();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if (charset === 'gb2312' || charset === 'gbk') {
charset = 'gb18030';
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// turn raw buffers into a single utf-8 buffer
return convert(buffer, 'UTF-8', charset).toString();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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';
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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]);
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// don't allow cloning a used body
if (instance.bodyUsed) {
throw new Error('cannot clone body after it is used');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return body;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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';
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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);
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// expose Promise
Body.Promise = global.Promise;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* headers.js
*
* Headers class offers convenient helpers
*/
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function validateName(name) {
name = `${name}`;
if (invalidTokenRegex.test(name) || name === '') {
throw new TypeError(`${name} is not a legal HTTP header name`);
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function validateValue(value) {
value = `${value}`;
if (invalidHeaderCharRegex.test(value)) {
throw new TypeError(`${value} is not a legal HTTP header value`);
}
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Find the key in the map object given a header name.
*
2022-03-21 00:47:21 +00:00
* Returns undefined if not found.
*
2022-03-21 00:47:21 +00:00
* @param String name Header name
* @return String|Undefined
*/
2022-03-21 00:47:21 +00:00
function find(map, name) {
name = name.toLowerCase();
for (const key in map) {
if (key.toLowerCase() === name) {
return key;
}
}
return undefined;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this[MAP] = Object.create(null);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (init instanceof Headers) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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');
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return this[MAP][key].join(', ');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
callback.call(thisArg, value, name, this);
pairs = getHeaders(this);
i++;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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];
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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];
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Check for header name existence
*
* @param String name Header name
* @return Boolean
*/
has(name) {
name = `${name}`;
validateName(name);
return find(this[MAP], name) !== undefined;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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];
}
}
2022-03-21 00:47:21 +00:00
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP];
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Get an iterator on keys.
*
* @return Iterator
*/
keys() {
return createHeadersIterator(this, 'key');
}
2022-03-21 00:47:21 +00:00
/**
* 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');
}
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
value: 'Headers',
writable: false,
enumerable: false,
configurable: true
});
2022-03-21 00:47:21 +00:00
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 }
});
2022-03-21 00:47:21 +00:00
function getHeaders(headers) {
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
2022-03-21 00:47:21 +00:00
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(', ')];
});
}
2022-03-21 00:47:21 +00:00
const INTERNAL = Symbol('internal');
2022-03-21 00:47:21 +00:00
function createHeadersIterator(target, kind) {
const iterator = Object.create(HeadersIteratorPrototype);
iterator[INTERNAL] = {
target,
kind,
index: 0
};
return iterator;
}
2022-03-21 00:47:21 +00:00
const HeadersIteratorPrototype = Object.setPrototypeOf({
next() {
// istanbul ignore if
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
throw new TypeError('Value of `this` is not a HeadersIterator');
}
2022-03-21 00:47:21 +00:00
var _INTERNAL = this[INTERNAL];
const target = _INTERNAL.target,
kind = _INTERNAL.kind,
index = _INTERNAL.index;
2022-03-21 00:47:21 +00:00
const values = getHeaders(target, kind);
const len = values.length;
if (index >= len) {
return {
value: undefined,
done: true
};
}
2022-03-21 00:47:21 +00:00
this[INTERNAL].index = index + 1;
2022-03-21 00:47:21 +00:00
return {
value: values[index],
done: false
};
}
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
2022-03-21 00:47:21 +00:00
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
value: 'HeadersIterator',
writable: false,
enumerable: false,
configurable: true
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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]);
2022-03-21 00:47:21 +00:00
// 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];
}
2022-03-21 00:47:21 +00:00
return obj;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
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');
const URL = Url.URL || whatwgUrl.URL;
// fix an issue where "format", "parse" aren't a named export for node <10
const parse_url = Url.parse;
const format_url = Url.format;
/**
* Wrapper around `new URL` to handle arbitrary URLs
*
* @param {string} urlStr
* @return {void}
*/
function parseURL(urlStr) {
/*
Check whether the URL is absolute or not
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
*/
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
urlStr = new URL(urlStr).toString();
}
// Fallback to old implementation for arbitrary URLs
return parse_url(urlStr);
}
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 = parseURL(input.href);
} else {
// coerce input to a string before attempting to parse
parsedURL = parseURL(`${input}`);
}
input = {};
} else {
parsedURL = parseURL(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';
const URL$1 = Url.URL || whatwgUrl.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1(original).hostname;
const dest = new URL$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
/**
* 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
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
// HTTP fetch step 5.5
switch (request.redirect) {
case 'error':
reject(new FetchError(`uri requested responds with a redirect, 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,
size: request.size
};
if (!isDomainOrSubdomain(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// 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;
/***/ }),
/***/ 9440:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
var isPlainObject = __nccwpck_require__(3287);
var universalUserAgent = __nccwpck_require__(5030);
function lowercaseKeys(object) {
if (!object) {
return {};
}
return Object.keys(object).reduce((newObj, key) => {
newObj[key.toLowerCase()] = object[key];
return newObj;
}, {});
}
function mergeDeep(defaults, options) {
const result = Object.assign({}, defaults);
Object.keys(options).forEach(key => {
if (isPlainObject.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;
}
function removeUndefinedProperties(obj) {
for (const key in obj) {
if (obj[key] === undefined) {
delete obj[key];
}
}
return obj;
}
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
options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging
removeUndefinedProperties(options);
removeUndefinedProperties(options.headers);
const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
if (defaults && defaults.mediaType.previews.length) {
mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
}
mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
return mergedOptions;
}
function addQueryParameters(url, parameters) {
const separator = /\?/.test(url) ? "&" : "?";
const names = Object.keys(parameters);
if (names.length === 0) {
return url;
}
return url + separator + names.map(name => {
if (name === "q") {
return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
}
return `${name}=${encodeURIComponent(parameters[name])}`;
}).join("&");
}
const urlVariableRegex = /\{[^}]+\}/g;
function removeNonChars(variableName) {
return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
}
function extractUrlVariableNames(url) {
const matches = url.match(urlVariableRegex);
if (!matches) {
return [];
}
return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
}
function omit(object, keysToOmit) {
return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
obj[key] = object[key];
return obj;
}, {});
}
// 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.
/* 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, "]");
}
return part;
}).join("");
}
function encodeUnreserved(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
});
}
function encodeValue(operator, value, key) {
value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
if (key) {
return encodeUnreserved(key) + "=" + value;
} else {
return value;
}
}
function isDefined(value) {
return value !== undefined && value !== null;
}
function isKeyOperator(operator) {
return operator === ";" || operator === "&" || operator === "?";
}
function getValues(context, operator, key, modifier) {
var value = context[key],
result = [];
if (isDefined(value) && value !== "") {
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
value = value.toString();
if (modifier && modifier !== "*") {
value = value.substring(0, parseInt(modifier, 10));
}
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 = [];
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()));
}
});
}
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("");
}
}
return result;
}
function parseUrl(template) {
return {
expand: expand.bind(null, template)
};
}
function expand(template, context) {
var operators = ["+", "#", ".", "/", ";", "?", "&"];
return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
if (expression) {
let operator = "";
const values = [];
if (operators.indexOf(expression.charAt(0)) !== -1) {
operator = expression.charAt(0);
expression = expression.substr(1);
}
expression.split(/,/g).forEach(function (variable) {
var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
});
if (operator && operator !== "+") {
var separator = ",";
if (operator === "?") {
separator = "&";
} else if (operator !== "#") {
separator = operator;
}
return (values.length !== 0 ? operator : "") + values.join(separator);
} else {
return values.join(",");
}
} else {
return encodeReserved(literal);
}
});
}
function parse(options) {
// https://fetch.spec.whatwg.org/#methods
let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
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
const urlVariableNames = extractUrlVariableNames(url);
url = parseUrl(url).expand(parameters);
if (!/^http/.test(url)) {
url = options.baseUrl + url;
}
const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
const remainingParameters = omit(parameters, omittedParameters);
const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
if (!isBinaryRequest) {
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(",");
}
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
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
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
if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
body = "";
} // Only return body/request keys if present
return Object.assign({
method,
url,
headers
}, typeof body !== "undefined" ? {
body
} : null, options.request ? {
request: options.request
} : null);
}
function endpointWithDefaults(defaults, route, options) {
return parse(merge(defaults, route, options));
}
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
});
}
const VERSION = "6.0.10";
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
/***/ }),
/***/ 8467:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
var request = __nccwpck_require__(6234);
var universalUserAgent = __nccwpck_require__(5030);
const VERSION = "4.5.8";
class GraphqlError extends Error {
constructor(request, response) {
const message = response.data.errors[0].message;
super(message);
Object.assign(this, response.data);
Object.assign(this, {
headers: response.headers
});
this.name = "GraphqlError";
this.request = request; // Maintains proper stack trace (only available on V8)
/* istanbul ignore next */
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
}
const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"];
const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
function graphql(request, query, options) {
if (typeof query === "string" && options && "query" in options) {
return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
}
const parsedOptions = typeof query === "string" ? Object.assign({
query
}, options) : query;
const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {
if (NON_VARIABLE_OPTIONS.includes(key)) {
result[key] = parsedOptions[key];
return result;
}
if (!result.variables) {
result.variables = {};
}
result.variables[key] = parsedOptions[key];
return result;
}, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix
// https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451
const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;
if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
}
return request(requestOptions).then(response => {
if (response.data.errors) {
const headers = {};
for (const key of Object.keys(response.headers)) {
headers[key] = response.headers[key];
}
throw new GraphqlError(requestOptions, {
headers,
data: response.data
});
}
return response.data.data;
});
}
function withDefaults(request$1, newDefaults) {
const newRequest = request$1.defaults(newDefaults);
const newApi = (query, options) => {
return graphql(newRequest, query, options);
};
return Object.assign(newApi, {
defaults: withDefaults.bind(null, newRequest),
endpoint: request.request.endpoint
});
}
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"
});
}
exports.graphql = graphql$1;
exports.withCustomRequest = withCustomRequest;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 4193:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
const VERSION = "2.13.3";
/**
* Some list response that can be paginated have a different response structure
*
* 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.
*
* 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.
*
* We check if a "total_count" key is present in the response data, but also make sure that
* a "url" property is not, as the "Get the combined status for a specific ref" endpoint would
* otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
*/
function normalizePaginatedListResponse(response) {
const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way
// to retrieve the same information.
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;
if (typeof incompleteResults !== "undefined") {
response.data.incomplete_results = incompleteResults;
}
if (typeof repositorySelection !== "undefined") {
response.data.repository_selection = repositorySelection;
}
response.data.total_count = totalCount;
return response;
}
function iterator(octokit, route, parameters) {
const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
const requestMethod = typeof route === "function" ? route : octokit.request;
const method = options.method;
const headers = options.headers;
let url = options.url;
return {
[Symbol.asyncIterator]: () => ({
async next() {
if (!url) return {
done: true
};
const response = await requestMethod({
method,
url,
headers
});
const normalizedResponse = normalizePaginatedListResponse(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
url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
return {
value: normalizedResponse
};
}
})
};
}
function paginate(octokit, route, parameters, mapFn) {
if (typeof parameters === "function") {
mapFn = parameters;
parameters = undefined;
}
return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
}
function gather(octokit, results, iterator, mapFn) {
return iterator.next().then(result => {
if (result.done) {
return results;
}
let earlyExit = false;
function done() {
earlyExit = true;
}
results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
if (earlyExit) {
return results;
}
return gather(octokit, results, iterator, mapFn);
});
}
const composePaginateRest = Object.assign(paginate, {
iterator
});
const paginatingEndpoints = ["GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/actions/runners/downloads", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/runners/downloads", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/blocks", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/events", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/team-sync/group-mappings", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runners/downloads", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commit
function isPaginatingEndpoint(arg) {
if (typeof arg === "string") {
return paginatingEndpoints.includes(arg);
} else {
return false;
}
}
/**
* @param octokit Octokit instance
* @param options Options passed to Octokit constructor
*/
function paginateRest(octokit) {
return {
paginate: Object.assign(paginate.bind(null, octokit), {
iterator: iterator.bind(null, octokit)
})
};
}
paginateRest.VERSION = VERSION;
exports.composePaginateRest = composePaginateRest;
exports.isPaginatingEndpoint = isPaginatingEndpoint;
exports.paginateRest = paginateRest;
exports.paginatingEndpoints = paginatingEndpoints;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 3044:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
const Endpoints = {
actions: {
addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],
cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],
createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"],
createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"],
createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"],
createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],
deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"],
deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],
deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],
disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],
downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],
downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],
downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],
enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],
getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"],
getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],
getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"],
getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"],
getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"],
getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, {
renamed: ["actions", "getGithubActionsPermissionsRepository"]
}],
getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],
getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],
getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],
getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],
listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"],
listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],
listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"],
listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],
listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"],
listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],
listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],
listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"],
setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],
setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"],
setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"],
setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],
setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"]
},
activity: {
checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"],
getFeeds: ["GET /feeds"],
getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
getThread: ["GET /notifications/threads/{thread_id}"],
getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"],
listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
listNotificationsForAuthenticatedUser: ["GET /notifications"],
listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"],
listPublicEvents: ["GET /events"],
listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
listPublicEventsForUser: ["GET /users/{username}/events/public"],
listPublicOrgEvents: ["GET /orgs/{org}/events"],
listReceivedEventsForUser: ["GET /users/{username}/received_events"],
listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"],
listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"],
listReposStarredByAuthenticatedUser: ["GET /user/starred"],
listReposStarredByUser: ["GET /users/{username}/starred"],
listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
markNotificationsAsRead: ["PUT /notifications"],
markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"],
starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
},
apps: {
addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"],
checkToken: ["POST /applications/{client_id}/token"],
createContentAttachment: ["POST /content_references/{content_reference_id}/attachments", {
mediaType: {
previews: ["corsair"]
}
}],
createContentAttachmentForRepo: ["POST /repos/{owner}/{repo}/content_references/{content_reference_id}/attachments", {
mediaType: {
previews: ["corsair"]
}
}],
createFromManifest: ["POST /app-manifests/{code}/conversions"],
createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"],
deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
deleteInstallation: ["DELETE /app/installations/{installation_id}"],
deleteToken: ["DELETE /applications/{client_id}/token"],
getAuthenticated: ["GET /app"],
getBySlug: ["GET /apps/{app_slug}"],
getInstallation: ["GET /app/installations/{installation_id}"],
getOrgInstallation: ["GET /orgs/{org}/installation"],
getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"],
getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"],
getUserInstallation: ["GET /users/{username}/installation"],
getWebhookConfigForApp: ["GET /app/hook/config"],
listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],
listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"],
listInstallations: ["GET /app/installations"],
listInstallationsForAuthenticatedUser: ["GET /user/installations"],
listPlans: ["GET /marketplace_listing/plans"],
listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
listReposAccessibleToInstallation: ["GET /installation/repositories"],
listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"],
removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],
resetToken: ["PATCH /applications/{client_id}/token"],
revokeInstallationAccessToken: ["DELETE /installation/token"],
scopeToken: ["POST /applications/{client_id}/token/scoped"],
suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"],
updateWebhookConfigForApp: ["PATCH /app/hook/config"]
},
billing: {
getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"],
getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"],
getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"],
getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"]
},
checks: {
create: ["POST /repos/{owner}/{repo}/check-runs"],
createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],
listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],
listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],
setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"],
update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
},
codeScanning: {
deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],
getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, {
renamedParameters: {
alert_id: "alert_number"
}
}],
getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],
getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],
listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", {}, {
renamed: ["codeScanning", "listAlertInstances"]
}],
listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],
uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
},
codesOfConduct: {
getAllCodesOfConduct: ["GET /codes_of_conduct", {
mediaType: {
previews: ["scarlet-witch"]
}
}],
getConductCode: ["GET /codes_of_conduct/{key}", {
mediaType: {
previews: ["scarlet-witch"]
}
}],
getForRepo: ["GET /repos/{owner}/{repo}/community/code_of_conduct", {
mediaType: {
previews: ["scarlet-witch"]
}
}]
},
emojis: {
get: ["GET /emojis"]
},
enterpriseAdmin: {
disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"],
getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"],
listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"],
setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],
setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"],
setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"]
},
gists: {
checkIsStarred: ["GET /gists/{gist_id}/star"],
create: ["POST /gists"],
createComment: ["POST /gists/{gist_id}/comments"],
delete: ["DELETE /gists/{gist_id}"],
deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
fork: ["POST /gists/{gist_id}/forks"],
get: ["GET /gists/{gist_id}"],
getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
getRevision: ["GET /gists/{gist_id}/{sha}"],
list: ["GET /gists"],
listComments: ["GET /gists/{gist_id}/comments"],
listCommits: ["GET /gists/{gist_id}/commits"],
listForUser: ["GET /users/{username}/gists"],
listForks: ["GET /gists/{gist_id}/forks"],
listPublic: ["GET /gists/public"],
listStarred: ["GET /gists/starred"],
star: ["PUT /gists/{gist_id}/star"],
unstar: ["DELETE /gists/{gist_id}/star"],
update: ["PATCH /gists/{gist_id}"],
updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
},
git: {
createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
createRef: ["POST /repos/{owner}/{repo}/git/refs"],
createTag: ["POST /repos/{owner}/{repo}/git/tags"],
createTree: ["POST /repos/{owner}/{repo}/git/trees"],
deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
},
gitignore: {
getAllTemplates: ["GET /gitignore/templates"],
getTemplate: ["GET /gitignore/templates/{name}"]
},
interactions: {
getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, {
renamed: ["interactions", "getRestrictionsForAuthenticatedUser"]
}],
removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"],
removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, {
renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"]
}],
setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, {
renamed: ["interactions", "setRestrictionsForAuthenticatedUser"]
}]
},
issues: {
addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
create: ["POST /repos/{owner}/{repo}/issues"],
createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],
createLabel: ["POST /repos/{owner}/{repo}/labels"],
createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],
deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],
get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
list: ["GET /issues"],
listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", {
mediaType: {
previews: ["mockingbird"]
}
}],
listForAuthenticatedUser: ["GET /user/issues"],
listForOrg: ["GET /orgs/{org}/issues"],
listForRepo: ["GET /repos/{owner}/{repo}/issues"],
listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],
listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],
listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],
removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],
setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]
},
licenses: {
get: ["GET /licenses/{license}"],
getAllCommonlyUsed: ["GET /licenses"],
getForRepo: ["GET /repos/{owner}/{repo}/license"]
},
markdown: {
render: ["POST /markdown"],
renderRaw: ["POST /markdown/raw", {
headers: {
"content-type": "text/plain; charset=utf-8"
}
}]
},
meta: {
get: ["GET /meta"],
getOctocat: ["GET /octocat"],
getZen: ["GET /zen"],
root: ["GET /"]
},
migrations: {
cancelImport: ["DELETE /repos/{owner}/{repo}/import"],
deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive", {
mediaType: {
previews: ["wyandotte"]
}
}],
deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive", {
mediaType: {
previews: ["wyandotte"]
}
}],
downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive", {
mediaType: {
previews: ["wyandotte"]
}
}],
getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive", {
mediaType: {
previews: ["wyandotte"]
}
}],
getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"],
getImportStatus: ["GET /repos/{owner}/{repo}/import"],
getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"],
getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}", {
mediaType: {
previews: ["wyandotte"]
}
}],
getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}", {
mediaType: {
previews: ["wyandotte"]
}
}],
listForAuthenticatedUser: ["GET /user/migrations", {
mediaType: {
previews: ["wyandotte"]
}
}],
listForOrg: ["GET /orgs/{org}/migrations", {
mediaType: {
previews: ["wyandotte"]
}
}],
listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories", {
mediaType: {
previews: ["wyandotte"]
}
}],
listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {
mediaType: {
previews: ["wyandotte"]
}
}],
mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],
setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"],
startForAuthenticatedUser: ["POST /user/migrations"],
startForOrg: ["POST /orgs/{org}/migrations"],
startImport: ["PUT /repos/{owner}/{repo}/import"],
unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock", {
mediaType: {
previews: ["wyandotte"]
}
}],
unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock", {
mediaType: {
previews: ["wyandotte"]
}
}],
updateImport: ["PATCH /repos/{owner}/{repo}/import"]
},
orgs: {
blockUser: ["PUT /orgs/{org}/blocks/{username}"],
cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"],
createInvitation: ["POST /orgs/{org}/invitations"],
createWebhook: ["POST /orgs/{org}/hooks"],
deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
get: ["GET /orgs/{org}"],
getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
list: ["GET /organizations"],
listAppInstallations: ["GET /orgs/{org}/installations"],
listBlockedUsers: ["GET /orgs/{org}/blocks"],
listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
listForAuthenticatedUser: ["GET /user/orgs"],
listForUser: ["GET /users/{username}/orgs"],
listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
listMembers: ["GET /orgs/{org}/members"],
listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
listPendingInvitations: ["GET /orgs/{org}/invitations"],
listPublicMembers: ["GET /orgs/{org}/public_members"],
listWebhooks: ["GET /orgs/{org}/hooks"],
pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
removeMember: ["DELETE /orgs/{org}/members/{username}"],
removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"],
removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"],
setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"],
unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
update: ["PATCH /orgs/{org}"],
updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"],
updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
},
packages: {
deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"],
deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],
deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions", {}, {
renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"]
}],
getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions", {}, {
renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]
}],
getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"],
getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],
getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"],
getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"],
getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"],
getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"],
getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"],
restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],
restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],
restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]
},
projects: {
addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}", {
mediaType: {
previews: ["inertia"]
}
}],
createCard: ["POST /projects/columns/{column_id}/cards", {
mediaType: {
previews: ["inertia"]
}
}],
createColumn: ["POST /projects/{project_id}/columns", {
mediaType: {
previews: ["inertia"]
}
}],
createForAuthenticatedUser: ["POST /user/projects", {
mediaType: {
previews: ["inertia"]
}
}],
createForOrg: ["POST /orgs/{org}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
createForRepo: ["POST /repos/{owner}/{repo}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
delete: ["DELETE /projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
deleteCard: ["DELETE /projects/columns/cards/{card_id}", {
mediaType: {
previews: ["inertia"]
}
}],
deleteColumn: ["DELETE /projects/columns/{column_id}", {
mediaType: {
previews: ["inertia"]
}
}],
get: ["GET /projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
getCard: ["GET /projects/columns/cards/{card_id}", {
mediaType: {
previews: ["inertia"]
}
}],
getColumn: ["GET /projects/columns/{column_id}", {
mediaType: {
previews: ["inertia"]
}
}],
getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission", {
mediaType: {
previews: ["inertia"]
}
}],
listCards: ["GET /projects/columns/{column_id}/cards", {
mediaType: {
previews: ["inertia"]
}
}],
listCollaborators: ["GET /projects/{project_id}/collaborators", {
mediaType: {
previews: ["inertia"]
}
}],
listColumns: ["GET /projects/{project_id}/columns", {
mediaType: {
previews: ["inertia"]
}
}],
listForOrg: ["GET /orgs/{org}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
listForRepo: ["GET /repos/{owner}/{repo}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
listForUser: ["GET /users/{username}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
moveCard: ["POST /projects/columns/cards/{card_id}/moves", {
mediaType: {
previews: ["inertia"]
}
}],
moveColumn: ["POST /projects/columns/{column_id}/moves", {
mediaType: {
previews: ["inertia"]
}
}],
removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}", {
mediaType: {
previews: ["inertia"]
}
}],
update: ["PATCH /projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
updateCard: ["PATCH /projects/columns/cards/{card_id}", {
mediaType: {
previews: ["inertia"]
}
}],
updateColumn: ["PATCH /projects/columns/{column_id}", {
mediaType: {
previews: ["inertia"]
}
}]
},
pulls: {
checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
create: ["POST /repos/{owner}/{repo}/pulls"],
createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],
createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],
get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
list: ["GET /repos/{owner}/{repo}/pulls"],
listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],
listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],
update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch", {
mediaType: {
previews: ["lydian"]
}
}],
updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]
},
rateLimit: {
get: ["GET /rate_limit"]
},
reactions: {
createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
deleteLegacy: ["DELETE /reactions/{reaction_id}", {
mediaType: {
previews: ["squirrel-girl"]
}
}, {
deprecated: "octokit.rest.reactions.deleteLegacy() is deprecated, see https://docs.github.com/rest/reference/reactions/#delete-a-reaction-legacy"
}],
listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}],
listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", {
mediaType: {
previews: ["squirrel-girl"]
}
}]
},
repos: {
acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}"],
addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts", {
mediaType: {
previews: ["dorian"]
}
}],
compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"],
createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
mediaType: {
previews: ["zzzax"]
}
}],
createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
createForAuthenticatedUser: ["POST /user/repos"],
createFork: ["POST /repos/{owner}/{repo}/forks"],
createInOrg: ["POST /orgs/{org}/repos"],
createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"],
createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
createPagesSite: ["POST /repos/{owner}/{repo}/pages", {
mediaType: {
previews: ["switcheroo"]
}
}],
createRelease: ["POST /repos/{owner}/{repo}/releases"],
createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate", {
mediaType: {
previews: ["baptiste"]
}
}],
createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}"],
delete: ["DELETE /repos/{owner}/{repo}"],
deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],
deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],
deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
mediaType: {
previews: ["zzzax"]
}
}],
deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],
deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],
deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages", {
mediaType: {
previews: ["switcheroo"]
}
}],
deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],
deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes", {
mediaType: {
previews: ["london"]
}
}],
disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts", {
mediaType: {
previews: ["dorian"]
}
}],
downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, {
renamed: ["repos", "downloadZipballArchive"]
}],
downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes", {
mediaType: {
previews: ["london"]
}
}],
enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts", {
mediaType: {
previews: ["dorian"]
}
}],
get: ["GET /repos/{owner}/{repo}"],
getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],
getAllTopics: ["GET /repos/{owner}/{repo}/topics", {
mediaType: {
previews: ["mercy"]
}
}],
getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],
getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"],
getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],
getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
mediaType: {
previews: ["zzzax"]
}
}],
getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],
getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"],
getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
getPages: ["GET /repos/{owner}/{repo}/pages"],
getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
getReadme: ["GET /repos/{owner}/{repo}/readme"],
getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],
getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],
getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],
listBranches: ["GET /repos/{owner}/{repo}/branches"],
listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", {
mediaType: {
previews: ["groot"]
}
}],
listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],
listCommits: ["GET /repos/{owner}/{repo}/commits"],
listContributors: ["GET /repos/{owner}/{repo}/contributors"],
listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
listForAuthenticatedUser: ["GET /user/repos"],
listForOrg: ["GET /orgs/{org}/repos"],
listForUser: ["GET /users/{username}/repos"],
listForks: ["GET /repos/{owner}/{repo}/forks"],
listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
listLanguages: ["GET /repos/{owner}/{repo}/languages"],
listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
listPublic: ["GET /repositories"],
listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", {
mediaType: {
previews: ["groot"]
}
}],
listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
listReleases: ["GET /repos/{owner}/{repo}/releases"],
listTags: ["GET /repos/{owner}/{repo}/tags"],
listTeams: ["GET /repos/{owner}/{repo}/teams"],
listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
merge: ["POST /repos/{owner}/{repo}/merges"],
pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"],
removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics", {
mediaType: {
previews: ["mercy"]
}
}],
requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
mapToData: "apps"
}],
setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
mapToData: "contexts"
}],
setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
mapToData: "teams"
}],
setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
mapToData: "users"
}],
testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
transfer: ["POST /repos/{owner}/{repo}/transfer"],
update: ["PATCH /repos/{owner}/{repo}"],
updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],
updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],
updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],
updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, {
renamed: ["repos", "updateStatusCheckProtection"]
}],
updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],
uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", {
baseUrl: "https://uploads.github.com"
}]
},
search: {
code: ["GET /search/code"],
commits: ["GET /search/commits", {
mediaType: {
previews: ["cloak"]
}
}],
issuesAndPullRequests: ["GET /search/issues"],
labels: ["GET /search/labels"],
repos: ["GET /search/repositories"],
topics: ["GET /search/topics", {
mediaType: {
previews: ["mercy"]
}
}],
users: ["GET /search/users"]
},
secretScanning: {
getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],
listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]
},
teams: {
addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],
addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
mediaType: {
previews: ["inertia"]
}
}],
checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
create: ["POST /orgs/{org}/teams"],
createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
getByName: ["GET /orgs/{org}/teams/{team_slug}"],
getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],
list: ["GET /orgs/{org}/teams"],
listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
listForAuthenticatedUser: ["GET /user/teams"],
listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"],
listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects", {
mediaType: {
previews: ["inertia"]
}
}],
listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],
removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
},
users: {
addEmailForAuthenticated: ["POST /user/emails"],
block: ["PUT /user/blocks/{username}"],
checkBlocked: ["GET /user/blocks/{username}"],
checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
createGpgKeyForAuthenticated: ["POST /user/gpg_keys"],
createPublicSshKeyForAuthenticated: ["POST /user/keys"],
deleteEmailForAuthenticated: ["DELETE /user/emails"],
deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}"],
deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}"],
follow: ["PUT /user/following/{username}"],
getAuthenticated: ["GET /user"],
getByUsername: ["GET /users/{username}"],
getContextForUser: ["GET /users/{username}/hovercard"],
getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}"],
getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}"],
list: ["GET /users"],
listBlockedByAuthenticated: ["GET /user/blocks"],
listEmailsForAuthenticated: ["GET /user/emails"],
listFollowedByAuthenticated: ["GET /user/following"],
listFollowersForAuthenticatedUser: ["GET /user/followers"],
listFollowersForUser: ["GET /users/{username}/followers"],
listFollowingForUser: ["GET /users/{username}/following"],
listGpgKeysForAuthenticated: ["GET /user/gpg_keys"],
listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
listPublicEmailsForAuthenticated: ["GET /user/public_emails"],
listPublicKeysForUser: ["GET /users/{username}/keys"],
listPublicSshKeysForAuthenticated: ["GET /user/keys"],
setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility"],
unblock: ["DELETE /user/blocks/{username}"],
unfollow: ["DELETE /user/following/{username}"],
updateAuthenticated: ["PATCH /user"]
}
};
2021-01-08 20:47:49 +00:00
const VERSION = "5.3.1";
2021-01-08 20:47:49 +00:00
function endpointsToMethods(octokit, endpointsMap) {
const newMethods = {};
2021-01-08 20:47:49 +00:00
for (const [scope, endpoints] of Object.entries(endpointsMap)) {
for (const [methodName, endpoint] of Object.entries(endpoints)) {
const [route, defaults, decorations] = endpoint;
const [method, url] = route.split(/ /);
const endpointDefaults = Object.assign({
method,
url
}, defaults);
if (!newMethods[scope]) {
newMethods[scope] = {};
2021-01-08 20:47:49 +00:00
}
const scopeMethods = newMethods[scope];
if (decorations) {
scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);
continue;
2021-01-08 20:47:49 +00:00
}
scopeMethods[methodName] = octokit.request.defaults(endpointDefaults);
2021-01-08 20:47:49 +00:00
}
}
return newMethods;
2021-01-08 20:47:49 +00:00
}
function decorate(octokit, scope, methodName, defaults, decorations) {
const requestWithDefaults = octokit.request.defaults(defaults);
/* istanbul ignore next */
2021-01-08 20:47:49 +00:00
function withDecorations(...args) {
// @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData`
2021-01-08 20:47:49 +00:00
if (decorations.mapToData) {
options = Object.assign({}, options, {
data: options[decorations.mapToData],
[decorations.mapToData]: undefined
});
return requestWithDefaults(options);
2021-01-08 20:47:49 +00:00
}
if (decorations.renamed) {
const [newScope, newMethodName] = decorations.renamed;
octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);
}
2021-01-08 20:47:49 +00:00
if (decorations.deprecated) {
octokit.log.warn(decorations.deprecated);
2021-01-08 20:47:49 +00:00
}
if (decorations.renamedParameters) {
// @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
const options = requestWithDefaults.endpoint.merge(...args);
for (const [name, alias] of Object.entries(decorations.renamedParameters)) {
if (name in options) {
octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`);
if (!(alias in options)) {
options[alias] = options[name];
}
delete options[name];
}
}
2021-01-08 20:47:49 +00:00
return requestWithDefaults(options);
} // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
2021-01-08 20:47:49 +00:00
return requestWithDefaults(...args);
}
return Object.assign(withDecorations, requestWithDefaults);
2021-01-08 20:47:49 +00:00
}
function restEndpointMethods(octokit) {
const api = endpointsToMethods(octokit, Endpoints);
return {
rest: api
};
2021-01-08 20:47:49 +00:00
}
restEndpointMethods.VERSION = VERSION;
function legacyRestEndpointMethods(octokit) {
const api = endpointsToMethods(octokit, Endpoints);
return _objectSpread2(_objectSpread2({}, api), {}, {
rest: api
});
}
legacyRestEndpointMethods.VERSION = VERSION;
2021-01-08 20:47:49 +00:00
exports.legacyRestEndpointMethods = legacyRestEndpointMethods;
exports.restEndpointMethods = restEndpointMethods;
//# sourceMappingURL=index.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 9968:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-01-08 20:47:49 +00:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var BottleneckLight = _interopDefault(__nccwpck_require__(1174));
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
2021-01-08 20:47:49 +00:00
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
2021-06-02 10:03:23 +00:00
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
2021-01-08 20:47:49 +00:00
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
2021-01-08 20:47:49 +00:00
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
2021-01-08 20:47:49 +00:00
}
}
return target;
2021-01-08 20:47:49 +00:00
}
2021-06-02 10:03:23 +00:00
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
2022-03-21 00:47:21 +00:00
const VERSION = "3.6.2";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const noop = () => Promise.resolve(); // @ts-expect-error
2021-01-08 20:47:49 +00:00
function wrapRequest(state, request, options) {
return state.retryLimiter.schedule(doRequest, state, request, options);
2022-03-21 00:47:21 +00:00
} // @ts-expect-error
2021-01-08 20:47:49 +00:00
async function doRequest(state, request, options) {
const isWrite = options.method !== "GET" && options.method !== "HEAD";
const {
pathname
} = new URL(options.url, "http://github.test");
const isSearch = options.method === "GET" && pathname.startsWith("/search/");
const isGraphQL = pathname.startsWith("/graphql");
const retryCount = ~~options.request.retryCount;
const jobOptions = retryCount > 0 ? {
priority: 0,
weight: 0
} : {};
2021-01-08 20:47:49 +00:00
if (state.clustering) {
// Remove a job from Redis if it has not completed or failed within 60s
// Examples: Node process terminated, client disconnected, etc.
2022-03-21 00:47:21 +00:00
// @ts-expect-error
jobOptions.expiration = 1000 * 60;
} // Guarantee at least 1000ms between writes
// GraphQL can also trigger writes
2021-01-08 20:47:49 +00:00
if (isWrite || isGraphQL) {
await state.write.key(state.id).schedule(jobOptions, noop);
} // Guarantee at least 3000ms between requests that trigger notifications
2021-01-08 20:47:49 +00:00
if (isWrite && state.triggersNotification(pathname)) {
await state.notifications.key(state.id).schedule(jobOptions, noop);
} // Guarantee at least 2000ms between search requests
2021-01-08 20:47:49 +00:00
if (isSearch) {
await state.search.key(state.id).schedule(jobOptions, noop);
}
2021-01-08 20:47:49 +00:00
const req = state.global.key(state.id).schedule(jobOptions, request, options);
if (isGraphQL) {
const res = await req;
2022-03-21 00:47:21 +00:00
if (res.data.errors != null && // @ts-expect-error
res.data.errors.some(error => error.type === "RATE_LIMITED")) {
const error = Object.assign(new Error("GraphQL Rate Limit Exceeded"), {
response: res,
data: res.data
});
throw error;
2021-01-08 20:47:49 +00:00
}
}
return req;
2021-01-08 20:47:49 +00:00
}
var triggersNotificationPaths = ["/orgs/{org}/invitations", "/orgs/{org}/invitations/{invitation_id}", "/orgs/{org}/teams/{team_slug}/discussions", "/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "/repos/{owner}/{repo}/collaborators/{username}", "/repos/{owner}/{repo}/commits/{commit_sha}/comments", "/repos/{owner}/{repo}/issues", "/repos/{owner}/{repo}/issues/{issue_number}/comments", "/repos/{owner}/{repo}/pulls", "/repos/{owner}/{repo}/pulls/{pull_number}/comments", "/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies", "/repos/{owner}/{repo}/pulls/{pull_number}/merge", "/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "/repos/{owner}/{repo}/pulls/{pull_number}/reviews", "/repos/{owner}/{repo}/releases", "/teams/{team_id}/discussions", "/teams/{team_id}/discussions/{discussion_number}/comments"];
2021-01-08 20:47:49 +00:00
function routeMatcher(paths) {
// EXAMPLE. For the following paths:
2021-01-08 20:47:49 +00:00
/* [
"/orgs/{org}/invitations",
"/repos/{owner}/{repo}/collaborators/{username}"
] */
2022-03-21 00:47:21 +00:00
const regexes = paths.map(path => path.split("/").map(c => c.startsWith("{") ? "(?:.+?)" : c).join("/")); // 'regexes' would contain:
2021-01-08 20:47:49 +00:00
/* [
'/orgs/(?:.+?)/invitations',
'/repos/(?:.+?)/(?:.+?)/collaborators/(?:.+?)'
] */
2021-01-08 20:47:49 +00:00
const regex = `^(?:${regexes.map(r => `(?:${r})`).join("|")})[^/]*$`; // 'regex' would contain:
2021-01-08 20:47:49 +00:00
/*
^(?:(?:\/orgs\/(?:.+?)\/invitations)|(?:\/repos\/(?:.+?)\/(?:.+?)\/collaborators\/(?:.+?)))[^\/]*$
It may look scary, but paste it into https://www.debuggex.com/
and it will make a lot more sense!
*/
2021-01-08 20:47:49 +00:00
return new RegExp(regex, "i");
}
2021-01-08 20:47:49 +00:00
const regex = routeMatcher(triggersNotificationPaths);
const triggersNotification = regex.test.bind(regex);
2022-03-21 00:47:21 +00:00
const groups = {}; // @ts-expect-error
2021-01-08 20:47:49 +00:00
const createGroups = function (Bottleneck, common) {
groups.global = new Bottleneck.Group(_objectSpread2({
id: "octokit-global",
maxConcurrent: 10
2022-03-21 00:47:21 +00:00
}, common));
groups.search = new Bottleneck.Group(_objectSpread2({
id: "octokit-search",
maxConcurrent: 1,
minTime: 2000
2022-03-21 00:47:21 +00:00
}, common));
groups.write = new Bottleneck.Group(_objectSpread2({
id: "octokit-write",
maxConcurrent: 1,
minTime: 1000
2022-03-21 00:47:21 +00:00
}, common));
groups.notifications = new Bottleneck.Group(_objectSpread2({
id: "octokit-notifications",
maxConcurrent: 1,
minTime: 3000
}, common));
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function throttling(octokit, octokitOptions) {
const {
enabled = true,
Bottleneck = BottleneckLight,
id = "no-id",
timeout = 1000 * 60 * 2,
// Redis TTL: 2 minutes
2022-03-21 00:47:21 +00:00
connection
} = octokitOptions.throttle || {};
if (!enabled) {
return {};
}
2021-01-08 20:47:49 +00:00
const common = {
connection,
timeout
2022-03-21 00:47:21 +00:00
};
2021-01-08 20:47:49 +00:00
if (groups.global == null) {
createGroups(Bottleneck, common);
2021-01-08 20:47:49 +00:00
}
const state = Object.assign(_objectSpread2({
clustering: connection != null,
triggersNotification,
2022-03-13 09:46:59 +00:00
minimumSecondaryRateRetryAfter: 5,
retryAfterBaseValue: 1000,
retryLimiter: new Bottleneck(),
id
2022-03-21 00:47:21 +00:00
}, groups), octokitOptions.throttle);
const isUsingDeprecatedOnAbuseLimitHandler = typeof state.onAbuseLimit === "function" && state.onAbuseLimit;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (typeof (isUsingDeprecatedOnAbuseLimitHandler ? state.onAbuseLimit : state.onSecondaryRateLimit) !== "function" || typeof state.onRateLimit !== "function") {
throw new Error(`octokit/plugin-throttling error:
2022-03-13 09:46:59 +00:00
You must pass the onSecondaryRateLimit and onRateLimit error handlers.
See https://github.com/octokit/rest.js#throttling
2021-01-08 20:47:49 +00:00
const octokit = new Octokit({
throttle: {
2022-03-13 09:46:59 +00:00
onSecondaryRateLimit: (retryAfter, options) => {/* ... */},
onRateLimit: (retryAfter, options) => {/* ... */}
}
})
`);
2021-01-08 20:47:49 +00:00
}
const events = {};
2022-03-21 00:47:21 +00:00
const emitter = new Bottleneck.Events(events); // @ts-expect-error
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
events.on("secondary-limit", isUsingDeprecatedOnAbuseLimitHandler ? function (...args) {
2022-03-13 09:46:59 +00:00
octokit.log.warn("[@octokit/plugin-throttling] `onAbuseLimit()` is deprecated and will be removed in a future release of `@octokit/plugin-throttling`, please use the `onSecondaryRateLimit` handler instead");
return state.onAbuseLimit(...args);
2022-03-21 00:47:21 +00:00
} : state.onSecondaryRateLimit); // @ts-expect-error
2022-03-21 00:47:21 +00:00
events.on("rate-limit", state.onRateLimit); // @ts-expect-error
2022-03-21 00:47:21 +00:00
events.on("error", e => octokit.log.warn("Error in throttling-plugin limit handler", e)); // @ts-expect-error
state.retryLimiter.on("failed", async function (error, info) {
const options = info.args[info.args.length - 1];
const {
pathname
} = new URL(options.url, "http://github.test");
const shouldRetryGraphQL = pathname.startsWith("/graphql") && error.status !== 401;
if (!(shouldRetryGraphQL || error.status === 403)) {
return;
2021-01-08 20:47:49 +00:00
}
const retryCount = ~~options.request.retryCount;
options.request.retryCount = retryCount;
const {
wantRetry,
2022-03-21 00:47:21 +00:00
retryAfter = 0
} = await async function () {
2021-09-07 09:00:42 +00:00
if (/\bsecondary rate\b/i.test(error.message)) {
2022-03-13 09:46:59 +00:00
// The user has hit the secondary rate limit. (REST and GraphQL)
// https://docs.github.com/en/rest/overview/resources-in-the-rest-api#secondary-rate-limits
// The Retry-After header can sometimes be blank when hitting a secondary rate limit,
// but is always present after 2-3s, so make sure to set `retryAfter` to at least 5s by default.
2022-03-13 09:46:59 +00:00
const retryAfter = Math.max(~~error.response.headers["retry-after"], state.minimumSecondaryRateRetryAfter);
const wantRetry = await emitter.trigger("secondary-limit", retryAfter, options, octokit);
return {
wantRetry,
retryAfter
};
}
if (error.response.headers != null && error.response.headers["x-ratelimit-remaining"] === "0") {
// The user has used all their allowed calls for the current time period (REST and GraphQL)
// https://docs.github.com/en/rest/reference/rate-limit (REST)
// https://docs.github.com/en/graphql/overview/resource-limitations#rate-limit (GraphQL)
const rateLimitReset = new Date(~~error.response.headers["x-ratelimit-reset"] * 1000).getTime();
const retryAfter = Math.max(Math.ceil((rateLimitReset - Date.now()) / 1000), 0);
const wantRetry = await emitter.trigger("rate-limit", retryAfter, options, octokit);
return {
wantRetry,
retryAfter
};
}
2021-01-08 20:47:49 +00:00
return {};
}();
2021-01-08 20:47:49 +00:00
if (wantRetry) {
2022-03-21 00:47:21 +00:00
options.request.retryCount++;
return retryAfter * state.retryAfterBaseValue;
2021-01-08 20:47:49 +00:00
}
});
octokit.hook.wrap("request", wrapRequest.bind(null, state));
return {};
}
throttling.VERSION = VERSION;
throttling.triggersNotification = triggersNotification;
2021-01-08 20:47:49 +00:00
exports.throttling = throttling;
//# sourceMappingURL=index.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 537:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-01-08 20:47:49 +00:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2021-01-08 20:47:49 +00:00
var deprecation = __nccwpck_require__(8932);
var once = _interopDefault(__nccwpck_require__(1223));
2021-01-08 20:47:49 +00:00
const logOnce = once(deprecation => console.warn(deprecation));
/**
* Error with extra properties to help with debugging
*/
2021-01-08 20:47:49 +00:00
class RequestError extends Error {
constructor(message, statusCode, options) {
super(message); // Maintains proper stack trace (only available on V8)
2021-01-08 20:47:49 +00:00
/* istanbul ignore next */
2021-01-08 20:47:49 +00:00
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
2021-01-08 20:47:49 +00: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;
2021-01-08 20:47:49 +00:00
}
});
this.headers = options.headers || {}; // redact request credentials without mutating original request options
2021-01-08 20:47:49 +00:00
const requestCopy = Object.assign({}, options.request);
2021-01-08 20:47:49 +00:00
if (options.request.headers.authorization) {
requestCopy.headers = Object.assign({}, options.request.headers, {
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
});
2021-01-08 20:47:49 +00: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;
2021-01-08 20:47:49 +00:00
}
}
exports.RequestError = RequestError;
//# sourceMappingURL=index.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 6234:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var endpoint = __nccwpck_require__(9440);
var universalUserAgent = __nccwpck_require__(5030);
var isPlainObject = __nccwpck_require__(3287);
var nodeFetch = _interopDefault(__nccwpck_require__(467));
var requestError = __nccwpck_require__(537);
const VERSION = "5.4.12";
function getBufferResponse(response) {
return response.arrayBuffer();
}
function fetchWrapper(requestOptions) {
if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
requestOptions.body = JSON.stringify(requestOptions.body);
2021-01-08 20:47:49 +00:00
}
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];
2021-01-08 20:47:49 +00:00
}
if (status === 204 || status === 205) {
return;
} // GitHub API returns 200 for HEAD requests
2021-01-08 20:47:49 +00:00
if (requestOptions.method === "HEAD") {
if (status < 400) {
return;
2021-01-08 20:47:49 +00:00
}
throw new requestError.RequestError(response.statusText, status, {
headers,
request: requestOptions
});
}
if (status === 304) {
throw new requestError.RequestError("Not modified", status, {
headers,
request: requestOptions
});
2021-01-08 20:47:49 +00:00
}
if (status >= 400) {
return response.text().then(message => {
const error = new requestError.RequestError(message, status, {
headers,
request: requestOptions
});
2021-01-08 20:47:49 +00:00
try {
let responseBody = JSON.parse(error.message);
Object.assign(error, responseBody);
let errors = responseBody.errors; // Assumption `errors` would always be in Array format
2021-01-08 20:47:49 +00:00
error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
} catch (e) {// ignore, see octokit/rest.js#684
}
2021-01-08 20:47:49 +00:00
throw error;
});
}
2021-01-08 20:47:49 +00:00
const contentType = response.headers.get("content-type");
2021-01-08 20:47:49 +00:00
if (/application\/json/.test(contentType)) {
return response.json();
}
2021-01-08 20:47:49 +00:00
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
return response.text();
}
2021-01-08 20:47:49 +00:00
return getBufferResponse(response);
}).then(data => {
return {
status,
url,
headers,
data
};
}).catch(error => {
if (error instanceof requestError.RequestError) {
throw error;
2021-01-08 20:47:49 +00:00
}
throw new requestError.RequestError(error.message, 500, {
headers,
request: requestOptions
});
});
}
2021-01-08 20:47:49 +00:00
function withDefaults(oldEndpoint, newDefaults) {
const endpoint = oldEndpoint.defaults(newDefaults);
2021-01-08 20:47:49 +00:00
const newApi = function (route, parameters) {
const endpointOptions = endpoint.merge(route, parameters);
2021-01-08 20:47:49 +00:00
if (!endpointOptions.request || !endpointOptions.request.hook) {
return fetchWrapper(endpoint.parse(endpointOptions));
}
2021-01-08 20:47:49 +00:00
const request = (route, parameters) => {
return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
};
2021-01-08 20:47:49 +00:00
Object.assign(request, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
return endpointOptions.request.hook(request, endpointOptions);
};
2021-01-08 20:47:49 +00:00
return Object.assign(newApi, {
endpoint,
defaults: withDefaults.bind(null, endpoint)
});
2021-01-08 20:47:49 +00:00
}
const request = withDefaults(endpoint.endpoint, {
headers: {
"user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
}
});
exports.request = request;
//# sourceMappingURL=index.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 1150:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-12-19 20:39:50 +00:00
const {spawnSync} = __nccwpck_require__(2081);
2021-01-08 20:47:49 +00:00
const isString = (a) => typeof a === 'string';
2021-01-08 20:47:49 +00:00
module.exports = (str, filter = {}) => {
if (!isString(str)) {
filter = str || {};
str = run();
}
const {
added,
modified,
untracked,
deleted,
renamed,
} = filter;
const files = parse(str);
const picked = pick(files, {
added,
modified,
untracked,
deleted,
renamed,
});
const names = getNames(picked);
return names;
};
2021-01-08 20:47:49 +00:00
const getName = ({name}) => name;
2021-01-08 20:47:49 +00:00
module.exports.getNames = getNames;
function getNames(files) {
return files.map(getName);
}
2021-01-08 20:47:49 +00:00
module.exports.run = run;
function run() {
const result = spawnSync('git', ['status', '--porcelain']);
return result.stdout.toString();
}
2021-01-08 20:47:49 +00:00
module.exports.parse = parse;
function parse(str) {
const result = [];
const lines = str
.split('\n')
.filter(Boolean);
for (const line of lines) {
const {name, mode} = parseLine(line);
result.push({
name,
mode,
});
}
return result;
2021-01-08 20:47:49 +00:00
}
const UNTRACKED = '?';
const RENAMED = 'R';
const ARROW = '-> ';
// "R a -> b" -> "b"
const cutRenameTo = (line) => {
const i = line.indexOf(ARROW);
const count = i + ARROW.length;
return line.slice(count);
};
2021-01-08 20:47:49 +00:00
function parseLine(line) {
const [first] = line;
if (first === UNTRACKED)
return {
name: line.replace('?? ', ''),
mode: UNTRACKED,
};
if (first === RENAMED)
return {
name: cutRenameTo(line),
mode: RENAMED,
};
const [mode] = line.match(/^[\sA-Z]{1,}\s/, '');
const name = line.replace(mode, '');
return {
name,
mode,
};
}
2021-01-08 20:47:49 +00:00
const isModified = ({mode}) => /M/.test(mode);
const isAdded = ({mode}) => /A/.test(mode);
const isRenamed = ({mode}) => /R/.test(mode);
const isDeleted = ({mode}) => /D/.test(mode);
const isUntracked = ({mode}) => /\?/.test(mode);
const check = ({added, modified, untracked, deleted, renamed}) => (file) => {
let is = false;
if (added)
is = is || isAdded(file);
if (modified)
is = is || isModified(file);
if (untracked)
is = is || isUntracked(file);
if (deleted)
is = is || isDeleted(file);
if (renamed)
is = is || isRenamed(file);
return is;
};
2021-01-08 20:47:49 +00:00
module.exports.pick = pick;
function pick(files, {added, modified, deleted, untracked, renamed}) {
return files.filter(check({
added,
modified,
untracked,
deleted,
renamed,
}));
2021-01-08 20:47:49 +00:00
}
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 4623:
/***/ (function(module, exports, __nccwpck_require__) {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getInput = void 0;
var dotenv_1 = __importDefault(__nccwpck_require__(2437));
dotenv_1.default.config();
var VALID_TYPES = ['string', 'array', 'boolean', 'number'];
var DEFAULT_OPTIONS = {
required: false,
type: 'string',
disableable: false
};
var getEnvVar = function (key) {
2021-12-19 20:39:50 +00:00
var parsed = process.env["INPUT_".concat(key.replace(/ /g, '_').toUpperCase())];
var raw = process.env[key];
return parsed || raw || undefined;
};
var parseArray = function (val) {
var array = val.split('\n').join(',').split(',');
var filtered = array.filter(function (n) { return n; });
return filtered.map(function (n) { return n.trim(); });
};
var parseBoolean = function (val) {
var trueValue = ['true', 'True', 'TRUE'];
var falseValue = ['false', 'False', 'FALSE'];
if (trueValue.includes(val))
return true;
if (falseValue.includes(val))
return false;
throw new Error('boolean input has to be one of \`true | True | TRUE | false | False | FALSE\`');
};
var parseNumber = function (val) {
var parsed = Number(val);
if (isNaN(parsed))
throw new Error('input has to be a valid number');
return parsed;
};
var parseValue = function (val, type) {
if (type === 'array') {
return parseArray(val);
}
if (type === 'boolean') {
return parseBoolean(val);
}
if (type === 'number') {
return parseNumber(val);
}
return val.trim();
};
var getInput = function (key, opts) {
var parsedOptions;
if (typeof key === 'string' || Array.isArray(key)) {
parsedOptions = __assign({ key: key }, opts);
}
else if (typeof key === 'object') {
parsedOptions = key;
}
else {
throw new Error('No key for input specified');
}
if (!parsedOptions.key)
throw new Error('No key for input specified');
var options = Object.assign({}, DEFAULT_OPTIONS, parsedOptions);
if (VALID_TYPES.includes(options.type) === false)
throw new Error('option type has to be one of `string | array | boolean | number`');
var val = typeof options.key === 'string' ? getEnvVar(options.key) : options.key.map(function (key) { return getEnvVar(key); }).filter(function (item) { return item; })[0];
if (options.disableable && val === 'false')
return undefined;
var parsed = val !== undefined ? parseValue(val, options.type) : undefined;
if (parsed === undefined) {
if (options.required)
2021-12-19 20:39:50 +00:00
throw new Error("Input `".concat(options.key, "` is required but was not provided."));
if (options.default !== undefined)
return options.default;
return undefined;
}
if (options.modifier)
return options.modifier(parsed);
return parsed;
};
exports.getInput = getInput;
module.exports.getInput = exports.getInput;
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
/***/ }),
/***/ 3682:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
var register = __nccwpck_require__(4670)
var addHook = __nccwpck_require__(5549)
var removeHook = __nccwpck_require__(6819)
// 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
/***/ }),
/***/ 5549:
/***/ ((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,
});
}
/***/ }),
/***/ 4670:
/***/ ((module) => {
module.exports = register;
function register(state, name, method, options) {
if (typeof method !== "function") {
throw new Error("method for before hook must be a function");
}
if (!options) {
options = {};
}
if (Array.isArray(name)) {
return name.reverse().reduce(function (callback, name) {
return register.bind(null, state, name, callback, options);
}, method)();
}
return Promise.resolve().then(function () {
if (!state.registry[name]) {
return method(options);
}
return state.registry[name].reduce(function (method, registered) {
return registered.hook.bind(null, method, options);
}, method)();
});
}
/***/ }),
/***/ 6819:
/***/ ((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);
}
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 1174:
/***/ (function(module) {
2021-01-08 20:47:49 +00:00
/**
* This file contains the Bottleneck library (MIT), compiled to ES2017, and without Clustering support.
* https://github.com/SGrondin/bottleneck
*/
(function (global, factory) {
true ? module.exports = factory() :
0;
}(this, (function () { 'use strict';
2021-01-08 20:47:49 +00:00
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
2021-01-08 20:47:49 +00:00
function getCjsExportFromNamespace (n) {
return n && n['default'] || n;
}
2021-01-08 20:47:49 +00:00
var load = function(received, defaults, onto = {}) {
var k, ref, v;
for (k in defaults) {
v = defaults[k];
onto[k] = (ref = received[k]) != null ? ref : v;
}
return onto;
};
2021-01-08 20:47:49 +00:00
var overwrite = function(received, defaults, onto = {}) {
var k, v;
for (k in received) {
v = received[k];
if (defaults[k] !== void 0) {
onto[k] = v;
}
}
return onto;
};
2021-01-08 20:47:49 +00:00
var parser = {
load: load,
overwrite: overwrite
};
2021-01-08 20:47:49 +00:00
var DLList;
DLList = class DLList {
constructor(incr, decr) {
this.incr = incr;
this.decr = decr;
this._first = null;
this._last = null;
this.length = 0;
}
push(value) {
var node;
this.length++;
if (typeof this.incr === "function") {
this.incr();
}
node = {
value,
prev: this._last,
next: null
};
if (this._last != null) {
this._last.next = node;
this._last = node;
} else {
this._first = this._last = node;
}
return void 0;
}
shift() {
var value;
if (this._first == null) {
return;
} else {
this.length--;
if (typeof this.decr === "function") {
this.decr();
}
}
value = this._first.value;
if ((this._first = this._first.next) != null) {
this._first.prev = null;
} else {
this._last = null;
}
return value;
}
first() {
if (this._first != null) {
return this._first.value;
}
}
getArray() {
var node, ref, results;
node = this._first;
results = [];
while (node != null) {
results.push((ref = node, node = node.next, ref.value));
}
return results;
}
forEachShift(cb) {
var node;
node = this.shift();
while (node != null) {
(cb(node), node = this.shift());
}
return void 0;
}
debug() {
var node, ref, ref1, ref2, results;
node = this._first;
results = [];
while (node != null) {
results.push((ref = node, node = node.next, {
value: ref.value,
prev: (ref1 = ref.prev) != null ? ref1.value : void 0,
next: (ref2 = ref.next) != null ? ref2.value : void 0
}));
}
return results;
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var DLList_1 = DLList;
var Events;
Events = class Events {
constructor(instance) {
this.instance = instance;
this._events = {};
if ((this.instance.on != null) || (this.instance.once != null) || (this.instance.removeAllListeners != null)) {
throw new Error("An Emitter already exists for this object");
}
this.instance.on = (name, cb) => {
return this._addListener(name, "many", cb);
};
this.instance.once = (name, cb) => {
return this._addListener(name, "once", cb);
};
this.instance.removeAllListeners = (name = null) => {
if (name != null) {
return delete this._events[name];
} else {
return this._events = {};
}
};
}
_addListener(name, status, cb) {
var base;
if ((base = this._events)[name] == null) {
base[name] = [];
}
this._events[name].push({cb, status});
return this.instance;
}
listenerCount(name) {
if (this._events[name] != null) {
return this._events[name].length;
} else {
return 0;
}
}
async trigger(name, ...args) {
var e, promises;
try {
if (name !== "debug") {
this.trigger("debug", `Event triggered: ${name}`, args);
}
if (this._events[name] == null) {
return;
}
this._events[name] = this._events[name].filter(function(listener) {
return listener.status !== "none";
});
promises = this._events[name].map(async(listener) => {
var e, returned;
if (listener.status === "none") {
return;
}
if (listener.status === "once") {
listener.status = "none";
}
try {
returned = typeof listener.cb === "function" ? listener.cb(...args) : void 0;
if (typeof (returned != null ? returned.then : void 0) === "function") {
return (await returned);
} else {
return returned;
}
} catch (error) {
e = error;
{
this.trigger("error", e);
}
return null;
}
});
return ((await Promise.all(promises))).find(function(x) {
return x != null;
});
} catch (error) {
e = error;
{
this.trigger("error", e);
}
return null;
}
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var Events_1 = Events;
var DLList$1, Events$1, Queues;
DLList$1 = DLList_1;
Events$1 = Events_1;
Queues = class Queues {
constructor(num_priorities) {
var i;
this.Events = new Events$1(this);
this._length = 0;
this._lists = (function() {
var j, ref, results;
results = [];
for (i = j = 1, ref = num_priorities; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) {
results.push(new DLList$1((() => {
return this.incr();
}), (() => {
return this.decr();
})));
}
return results;
}).call(this);
}
incr() {
if (this._length++ === 0) {
return this.Events.trigger("leftzero");
}
}
decr() {
if (--this._length === 0) {
return this.Events.trigger("zero");
}
}
push(job) {
return this._lists[job.options.priority].push(job);
}
queued(priority) {
if (priority != null) {
return this._lists[priority].length;
} else {
return this._length;
}
}
shiftAll(fn) {
return this._lists.forEach(function(list) {
return list.forEachShift(fn);
});
}
getFirst(arr = this._lists) {
var j, len, list;
for (j = 0, len = arr.length; j < len; j++) {
list = arr[j];
if (list.length > 0) {
return list;
}
}
return [];
}
shiftLastFrom(priority) {
return this.getFirst(this._lists.slice(priority).reverse()).shift();
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var Queues_1 = Queues;
var BottleneckError;
BottleneckError = class BottleneckError extends Error {};
var BottleneckError_1 = BottleneckError;
var BottleneckError$1, DEFAULT_PRIORITY, Job, NUM_PRIORITIES, parser$1;
NUM_PRIORITIES = 10;
DEFAULT_PRIORITY = 5;
parser$1 = parser;
BottleneckError$1 = BottleneckError_1;
Job = class Job {
constructor(task, args, options, jobDefaults, rejectOnDrop, Events, _states, Promise) {
this.task = task;
this.args = args;
this.rejectOnDrop = rejectOnDrop;
this.Events = Events;
this._states = _states;
this.Promise = Promise;
this.options = parser$1.load(options, jobDefaults);
this.options.priority = this._sanitizePriority(this.options.priority);
if (this.options.id === jobDefaults.id) {
this.options.id = `${this.options.id}-${this._randomIndex()}`;
}
this.promise = new this.Promise((_resolve, _reject) => {
this._resolve = _resolve;
this._reject = _reject;
});
this.retryCount = 0;
}
_sanitizePriority(priority) {
var sProperty;
sProperty = ~~priority !== priority ? DEFAULT_PRIORITY : priority;
if (sProperty < 0) {
return 0;
} else if (sProperty > NUM_PRIORITIES - 1) {
return NUM_PRIORITIES - 1;
} else {
return sProperty;
}
}
_randomIndex() {
return Math.random().toString(36).slice(2);
}
doDrop({error, message = "This job has been dropped by Bottleneck"} = {}) {
if (this._states.remove(this.options.id)) {
if (this.rejectOnDrop) {
this._reject(error != null ? error : new BottleneckError$1(message));
}
this.Events.trigger("dropped", {args: this.args, options: this.options, task: this.task, promise: this.promise});
return true;
} else {
return false;
}
}
_assertStatus(expected) {
var status;
status = this._states.jobStatus(this.options.id);
if (!(status === expected || (expected === "DONE" && status === null))) {
throw new BottleneckError$1(`Invalid job status ${status}, expected ${expected}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`);
}
}
doReceive() {
this._states.start(this.options.id);
return this.Events.trigger("received", {args: this.args, options: this.options});
}
doQueue(reachedHWM, blocked) {
this._assertStatus("RECEIVED");
this._states.next(this.options.id);
return this.Events.trigger("queued", {args: this.args, options: this.options, reachedHWM, blocked});
}
doRun() {
if (this.retryCount === 0) {
this._assertStatus("QUEUED");
this._states.next(this.options.id);
} else {
this._assertStatus("EXECUTING");
}
return this.Events.trigger("scheduled", {args: this.args, options: this.options});
}
async doExecute(chained, clearGlobalState, run, free) {
var error, eventInfo, passed;
if (this.retryCount === 0) {
this._assertStatus("RUNNING");
this._states.next(this.options.id);
} else {
this._assertStatus("EXECUTING");
}
eventInfo = {args: this.args, options: this.options, retryCount: this.retryCount};
this.Events.trigger("executing", eventInfo);
try {
passed = (await (chained != null ? chained.schedule(this.options, this.task, ...this.args) : this.task(...this.args)));
if (clearGlobalState()) {
this.doDone(eventInfo);
await free(this.options, eventInfo);
this._assertStatus("DONE");
return this._resolve(passed);
}
} catch (error1) {
error = error1;
return this._onFailure(error, eventInfo, clearGlobalState, run, free);
}
}
doExpire(clearGlobalState, run, free) {
var error, eventInfo;
if (this._states.jobStatus(this.options.id === "RUNNING")) {
this._states.next(this.options.id);
}
this._assertStatus("EXECUTING");
eventInfo = {args: this.args, options: this.options, retryCount: this.retryCount};
error = new BottleneckError$1(`This job timed out after ${this.options.expiration} ms.`);
return this._onFailure(error, eventInfo, clearGlobalState, run, free);
}
async _onFailure(error, eventInfo, clearGlobalState, run, free) {
var retry, retryAfter;
if (clearGlobalState()) {
retry = (await this.Events.trigger("failed", error, eventInfo));
if (retry != null) {
retryAfter = ~~retry;
this.Events.trigger("retry", `Retrying ${this.options.id} after ${retryAfter} ms`, eventInfo);
this.retryCount++;
return run(retryAfter);
} else {
this.doDone(eventInfo);
await free(this.options, eventInfo);
this._assertStatus("DONE");
return this._reject(error);
}
}
}
doDone(eventInfo) {
this._assertStatus("EXECUTING");
this._states.next(this.options.id);
return this.Events.trigger("done", eventInfo);
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var Job_1 = Job;
var BottleneckError$2, LocalDatastore, parser$2;
parser$2 = parser;
BottleneckError$2 = BottleneckError_1;
LocalDatastore = class LocalDatastore {
constructor(instance, storeOptions, storeInstanceOptions) {
this.instance = instance;
this.storeOptions = storeOptions;
this.clientId = this.instance._randomIndex();
parser$2.load(storeInstanceOptions, storeInstanceOptions, this);
this._nextRequest = this._lastReservoirRefresh = this._lastReservoirIncrease = Date.now();
this._running = 0;
this._done = 0;
this._unblockTime = 0;
this.ready = this.Promise.resolve();
this.clients = {};
this._startHeartbeat();
}
_startHeartbeat() {
var base;
if ((this.heartbeat == null) && (((this.storeOptions.reservoirRefreshInterval != null) && (this.storeOptions.reservoirRefreshAmount != null)) || ((this.storeOptions.reservoirIncreaseInterval != null) && (this.storeOptions.reservoirIncreaseAmount != null)))) {
return typeof (base = (this.heartbeat = setInterval(() => {
var amount, incr, maximum, now, reservoir;
now = Date.now();
if ((this.storeOptions.reservoirRefreshInterval != null) && now >= this._lastReservoirRefresh + this.storeOptions.reservoirRefreshInterval) {
this._lastReservoirRefresh = now;
this.storeOptions.reservoir = this.storeOptions.reservoirRefreshAmount;
this.instance._drainAll(this.computeCapacity());
}
if ((this.storeOptions.reservoirIncreaseInterval != null) && now >= this._lastReservoirIncrease + this.storeOptions.reservoirIncreaseInterval) {
({
reservoirIncreaseAmount: amount,
reservoirIncreaseMaximum: maximum,
reservoir
} = this.storeOptions);
this._lastReservoirIncrease = now;
incr = maximum != null ? Math.min(amount, maximum - reservoir) : amount;
if (incr > 0) {
this.storeOptions.reservoir += incr;
return this.instance._drainAll(this.computeCapacity());
}
}
}, this.heartbeatInterval))).unref === "function" ? base.unref() : void 0;
} else {
return clearInterval(this.heartbeat);
}
}
async __publish__(message) {
await this.yieldLoop();
return this.instance.Events.trigger("message", message.toString());
}
async __disconnect__(flush) {
await this.yieldLoop();
clearInterval(this.heartbeat);
return this.Promise.resolve();
}
yieldLoop(t = 0) {
return new this.Promise(function(resolve, reject) {
return setTimeout(resolve, t);
});
}
computePenalty() {
var ref;
return (ref = this.storeOptions.penalty) != null ? ref : (15 * this.storeOptions.minTime) || 5000;
}
async __updateSettings__(options) {
await this.yieldLoop();
parser$2.overwrite(options, options, this.storeOptions);
this._startHeartbeat();
this.instance._drainAll(this.computeCapacity());
return true;
}
async __running__() {
await this.yieldLoop();
return this._running;
}
async __queued__() {
await this.yieldLoop();
return this.instance.queued();
}
async __done__() {
await this.yieldLoop();
return this._done;
}
async __groupCheck__(time) {
await this.yieldLoop();
return (this._nextRequest + this.timeout) < time;
}
computeCapacity() {
var maxConcurrent, reservoir;
({maxConcurrent, reservoir} = this.storeOptions);
if ((maxConcurrent != null) && (reservoir != null)) {
return Math.min(maxConcurrent - this._running, reservoir);
} else if (maxConcurrent != null) {
return maxConcurrent - this._running;
} else if (reservoir != null) {
return reservoir;
} else {
return null;
}
}
conditionsCheck(weight) {
var capacity;
capacity = this.computeCapacity();
return (capacity == null) || weight <= capacity;
}
async __incrementReservoir__(incr) {
var reservoir;
await this.yieldLoop();
reservoir = this.storeOptions.reservoir += incr;
this.instance._drainAll(this.computeCapacity());
return reservoir;
}
async __currentReservoir__() {
await this.yieldLoop();
return this.storeOptions.reservoir;
}
isBlocked(now) {
return this._unblockTime >= now;
}
check(weight, now) {
return this.conditionsCheck(weight) && (this._nextRequest - now) <= 0;
}
async __check__(weight) {
var now;
await this.yieldLoop();
now = Date.now();
return this.check(weight, now);
}
async __register__(index, weight, expiration) {
var now, wait;
await this.yieldLoop();
now = Date.now();
if (this.conditionsCheck(weight)) {
this._running += weight;
if (this.storeOptions.reservoir != null) {
this.storeOptions.reservoir -= weight;
}
wait = Math.max(this._nextRequest - now, 0);
this._nextRequest = now + wait + this.storeOptions.minTime;
return {
success: true,
wait,
reservoir: this.storeOptions.reservoir
};
} else {
return {
success: false
};
}
}
strategyIsBlock() {
return this.storeOptions.strategy === 3;
}
async __submit__(queueLength, weight) {
var blocked, now, reachedHWM;
await this.yieldLoop();
if ((this.storeOptions.maxConcurrent != null) && weight > this.storeOptions.maxConcurrent) {
throw new BottleneckError$2(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);
}
now = Date.now();
reachedHWM = (this.storeOptions.highWater != null) && queueLength === this.storeOptions.highWater && !this.check(weight, now);
blocked = this.strategyIsBlock() && (reachedHWM || this.isBlocked(now));
if (blocked) {
this._unblockTime = now + this.computePenalty();
this._nextRequest = this._unblockTime + this.storeOptions.minTime;
this.instance._dropAllQueued();
}
return {
reachedHWM,
blocked,
strategy: this.storeOptions.strategy
};
}
async __free__(index, weight) {
await this.yieldLoop();
this._running -= weight;
this._done += weight;
this.instance._drainAll(this.computeCapacity());
return {
running: this._running
};
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var LocalDatastore_1 = LocalDatastore;
var BottleneckError$3, States;
BottleneckError$3 = BottleneckError_1;
States = class States {
constructor(status1) {
this.status = status1;
this._jobs = {};
this.counts = this.status.map(function() {
return 0;
});
}
next(id) {
var current, next;
current = this._jobs[id];
next = current + 1;
if ((current != null) && next < this.status.length) {
this.counts[current]--;
this.counts[next]++;
return this._jobs[id]++;
} else if (current != null) {
this.counts[current]--;
return delete this._jobs[id];
}
}
start(id) {
var initial;
initial = 0;
this._jobs[id] = initial;
return this.counts[initial]++;
}
remove(id) {
var current;
current = this._jobs[id];
if (current != null) {
this.counts[current]--;
delete this._jobs[id];
}
return current != null;
}
jobStatus(id) {
var ref;
return (ref = this.status[this._jobs[id]]) != null ? ref : null;
}
statusJobs(status) {
var k, pos, ref, results, v;
if (status != null) {
pos = this.status.indexOf(status);
if (pos < 0) {
throw new BottleneckError$3(`status must be one of ${this.status.join(', ')}`);
}
ref = this._jobs;
results = [];
for (k in ref) {
v = ref[k];
if (v === pos) {
results.push(k);
}
}
return results;
} else {
return Object.keys(this._jobs);
}
}
statusCounts() {
return this.counts.reduce(((acc, v, i) => {
acc[this.status[i]] = v;
return acc;
}), {});
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var States_1 = States;
var DLList$2, Sync;
DLList$2 = DLList_1;
Sync = class Sync {
constructor(name, Promise) {
this.schedule = this.schedule.bind(this);
this.name = name;
this.Promise = Promise;
this._running = 0;
this._queue = new DLList$2();
}
isEmpty() {
return this._queue.length === 0;
}
async _tryToRun() {
var args, cb, error, reject, resolve, returned, task;
if ((this._running < 1) && this._queue.length > 0) {
this._running++;
({task, args, resolve, reject} = this._queue.shift());
cb = (await (async function() {
try {
returned = (await task(...args));
return function() {
return resolve(returned);
};
} catch (error1) {
error = error1;
return function() {
return reject(error);
};
}
})());
this._running--;
this._tryToRun();
return cb();
}
}
schedule(task, ...args) {
var promise, reject, resolve;
resolve = reject = null;
promise = new this.Promise(function(_resolve, _reject) {
resolve = _resolve;
return reject = _reject;
});
this._queue.push({task, args, resolve, reject});
this._tryToRun();
return promise;
}
2021-01-08 20:47:49 +00:00
};
2021-01-08 20:47:49 +00:00
var Sync_1 = Sync;
2021-01-08 20:47:49 +00:00
var version = "2.19.5";
var version$1 = {
version: version
};
2021-01-08 20:47:49 +00:00
var version$2 = /*#__PURE__*/Object.freeze({
version: version,
default: version$1
});
2021-01-08 20:47:49 +00:00
var require$$2 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');
var require$$3 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');
var require$$4 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');
var Events$2, Group, IORedisConnection$1, RedisConnection$1, Scripts$1, parser$3;
parser$3 = parser;
Events$2 = Events_1;
RedisConnection$1 = require$$2;
IORedisConnection$1 = require$$3;
Scripts$1 = require$$4;
Group = (function() {
class Group {
constructor(limiterOptions = {}) {
this.deleteKey = this.deleteKey.bind(this);
this.limiterOptions = limiterOptions;
parser$3.load(this.limiterOptions, this.defaults, this);
this.Events = new Events$2(this);
this.instances = {};
this.Bottleneck = Bottleneck_1;
this._startAutoCleanup();
this.sharedConnection = this.connection != null;
if (this.connection == null) {
if (this.limiterOptions.datastore === "redis") {
this.connection = new RedisConnection$1(Object.assign({}, this.limiterOptions, {Events: this.Events}));
} else if (this.limiterOptions.datastore === "ioredis") {
this.connection = new IORedisConnection$1(Object.assign({}, this.limiterOptions, {Events: this.Events}));
}
}
}
key(key = "") {
var ref;
return (ref = this.instances[key]) != null ? ref : (() => {
var limiter;
limiter = this.instances[key] = new this.Bottleneck(Object.assign(this.limiterOptions, {
id: `${this.id}-${key}`,
timeout: this.timeout,
connection: this.connection
}));
this.Events.trigger("created", limiter, key);
return limiter;
})();
}
async deleteKey(key = "") {
var deleted, instance;
instance = this.instances[key];
if (this.connection) {
deleted = (await this.connection.__runCommand__(['del', ...Scripts$1.allKeys(`${this.id}-${key}`)]));
}
if (instance != null) {
delete this.instances[key];
await instance.disconnect();
}
return (instance != null) || deleted > 0;
}
limiters() {
var k, ref, results, v;
ref = this.instances;
results = [];
for (k in ref) {
v = ref[k];
results.push({
key: k,
limiter: v
});
}
return results;
}
keys() {
return Object.keys(this.instances);
}
async clusterKeys() {
var cursor, end, found, i, k, keys, len, next, start;
if (this.connection == null) {
return this.Promise.resolve(this.keys());
}
keys = [];
cursor = null;
start = `b_${this.id}-`.length;
end = "_settings".length;
while (cursor !== 0) {
[next, found] = (await this.connection.__runCommand__(["scan", cursor != null ? cursor : 0, "match", `b_${this.id}-*_settings`, "count", 10000]));
cursor = ~~next;
for (i = 0, len = found.length; i < len; i++) {
k = found[i];
keys.push(k.slice(start, -end));
}
}
return keys;
}
_startAutoCleanup() {
var base;
clearInterval(this.interval);
return typeof (base = (this.interval = setInterval(async() => {
var e, k, ref, results, time, v;
time = Date.now();
ref = this.instances;
results = [];
for (k in ref) {
v = ref[k];
try {
if ((await v._store.__groupCheck__(time))) {
results.push(this.deleteKey(k));
} else {
results.push(void 0);
}
} catch (error) {
e = error;
results.push(v.Events.trigger("error", e));
}
}
return results;
}, this.timeout / 2))).unref === "function" ? base.unref() : void 0;
}
updateSettings(options = {}) {
parser$3.overwrite(options, this.defaults, this);
parser$3.overwrite(options, options, this.limiterOptions);
if (options.timeout != null) {
return this._startAutoCleanup();
}
}
disconnect(flush = true) {
var ref;
if (!this.sharedConnection) {
return (ref = this.connection) != null ? ref.disconnect(flush) : void 0;
}
}
}
Group.prototype.defaults = {
timeout: 1000 * 60 * 5,
connection: null,
Promise: Promise,
id: "group-key"
};
return Group;
}).call(commonjsGlobal);
var Group_1 = Group;
var Batcher, Events$3, parser$4;
parser$4 = parser;
Events$3 = Events_1;
Batcher = (function() {
class Batcher {
constructor(options = {}) {
this.options = options;
parser$4.load(this.options, this.defaults, this);
this.Events = new Events$3(this);
this._arr = [];
this._resetPromise();
this._lastFlush = Date.now();
}
_resetPromise() {
return this._promise = new this.Promise((res, rej) => {
return this._resolve = res;
});
}
_flush() {
clearTimeout(this._timeout);
this._lastFlush = Date.now();
this._resolve();
this.Events.trigger("batch", this._arr);
this._arr = [];
return this._resetPromise();
}
add(data) {
var ret;
this._arr.push(data);
ret = this._promise;
if (this._arr.length === this.maxSize) {
this._flush();
} else if ((this.maxTime != null) && this._arr.length === 1) {
this._timeout = setTimeout(() => {
return this._flush();
}, this.maxTime);
}
return ret;
}
}
Batcher.prototype.defaults = {
maxTime: null,
maxSize: null,
Promise: Promise
};
return Batcher;
}).call(commonjsGlobal);
var Batcher_1 = Batcher;
var require$$4$1 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');
var require$$8 = getCjsExportFromNamespace(version$2);
var Bottleneck, DEFAULT_PRIORITY$1, Events$4, Job$1, LocalDatastore$1, NUM_PRIORITIES$1, Queues$1, RedisDatastore$1, States$1, Sync$1, parser$5,
splice = [].splice;
NUM_PRIORITIES$1 = 10;
DEFAULT_PRIORITY$1 = 5;
parser$5 = parser;
Queues$1 = Queues_1;
Job$1 = Job_1;
LocalDatastore$1 = LocalDatastore_1;
RedisDatastore$1 = require$$4$1;
Events$4 = Events_1;
States$1 = States_1;
Sync$1 = Sync_1;
Bottleneck = (function() {
class Bottleneck {
constructor(options = {}, ...invalid) {
var storeInstanceOptions, storeOptions;
this._addToQueue = this._addToQueue.bind(this);
this._validateOptions(options, invalid);
parser$5.load(options, this.instanceDefaults, this);
this._queues = new Queues$1(NUM_PRIORITIES$1);
this._scheduled = {};
this._states = new States$1(["RECEIVED", "QUEUED", "RUNNING", "EXECUTING"].concat(this.trackDoneStatus ? ["DONE"] : []));
this._limiter = null;
this.Events = new Events$4(this);
this._submitLock = new Sync$1("submit", this.Promise);
this._registerLock = new Sync$1("register", this.Promise);
storeOptions = parser$5.load(options, this.storeDefaults, {});
this._store = (function() {
if (this.datastore === "redis" || this.datastore === "ioredis" || (this.connection != null)) {
storeInstanceOptions = parser$5.load(options, this.redisStoreDefaults, {});
return new RedisDatastore$1(this, storeOptions, storeInstanceOptions);
} else if (this.datastore === "local") {
storeInstanceOptions = parser$5.load(options, this.localStoreDefaults, {});
return new LocalDatastore$1(this, storeOptions, storeInstanceOptions);
} else {
throw new Bottleneck.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`);
}
}).call(this);
this._queues.on("leftzero", () => {
var ref;
return (ref = this._store.heartbeat) != null ? typeof ref.ref === "function" ? ref.ref() : void 0 : void 0;
});
this._queues.on("zero", () => {
var ref;
return (ref = this._store.heartbeat) != null ? typeof ref.unref === "function" ? ref.unref() : void 0 : void 0;
});
}
_validateOptions(options, invalid) {
if (!((options != null) && typeof options === "object" && invalid.length === 0)) {
throw new Bottleneck.prototype.BottleneckError("Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.");
}
}
ready() {
return this._store.ready;
}
clients() {
return this._store.clients;
}
channel() {
return `b_${this.id}`;
}
channel_client() {
return `b_${this.id}_${this._store.clientId}`;
}
publish(message) {
return this._store.__publish__(message);
}
disconnect(flush = true) {
return this._store.__disconnect__(flush);
}
chain(_limiter) {
this._limiter = _limiter;
return this;
}
queued(priority) {
return this._queues.queued(priority);
}
clusterQueued() {
return this._store.__queued__();
}
empty() {
return this.queued() === 0 && this._submitLock.isEmpty();
}
running() {
return this._store.__running__();
}
done() {
return this._store.__done__();
}
jobStatus(id) {
return this._states.jobStatus(id);
}
jobs(status) {
return this._states.statusJobs(status);
}
counts() {
return this._states.statusCounts();
}
_randomIndex() {
return Math.random().toString(36).slice(2);
}
check(weight = 1) {
return this._store.__check__(weight);
}
_clearGlobalState(index) {
if (this._scheduled[index] != null) {
clearTimeout(this._scheduled[index].expiration);
delete this._scheduled[index];
return true;
} else {
return false;
}
}
async _free(index, job, options, eventInfo) {
var e, running;
try {
({running} = (await this._store.__free__(index, options.weight)));
this.Events.trigger("debug", `Freed ${options.id}`, eventInfo);
if (running === 0 && this.empty()) {
return this.Events.trigger("idle");
}
} catch (error1) {
e = error1;
return this.Events.trigger("error", e);
}
}
_run(index, job, wait) {
var clearGlobalState, free, run;
job.doRun();
clearGlobalState = this._clearGlobalState.bind(this, index);
run = this._run.bind(this, index, job);
free = this._free.bind(this, index, job);
return this._scheduled[index] = {
timeout: setTimeout(() => {
return job.doExecute(this._limiter, clearGlobalState, run, free);
}, wait),
expiration: job.options.expiration != null ? setTimeout(function() {
return job.doExpire(clearGlobalState, run, free);
}, wait + job.options.expiration) : void 0,
job: job
};
}
_drainOne(capacity) {
return this._registerLock.schedule(() => {
var args, index, next, options, queue;
if (this.queued() === 0) {
return this.Promise.resolve(null);
}
queue = this._queues.getFirst();
({options, args} = next = queue.first());
if ((capacity != null) && options.weight > capacity) {
return this.Promise.resolve(null);
}
this.Events.trigger("debug", `Draining ${options.id}`, {args, options});
index = this._randomIndex();
return this._store.__register__(index, options.weight, options.expiration).then(({success, wait, reservoir}) => {
var empty;
this.Events.trigger("debug", `Drained ${options.id}`, {success, args, options});
if (success) {
queue.shift();
empty = this.empty();
if (empty) {
this.Events.trigger("empty");
}
if (reservoir === 0) {
this.Events.trigger("depleted", empty);
}
this._run(index, next, wait);
return this.Promise.resolve(options.weight);
} else {
return this.Promise.resolve(null);
}
});
});
}
_drainAll(capacity, total = 0) {
return this._drainOne(capacity).then((drained) => {
var newCapacity;
if (drained != null) {
newCapacity = capacity != null ? capacity - drained : capacity;
return this._drainAll(newCapacity, total + drained);
} else {
return this.Promise.resolve(total);
}
}).catch((e) => {
return this.Events.trigger("error", e);
});
}
_dropAllQueued(message) {
return this._queues.shiftAll(function(job) {
return job.doDrop({message});
});
}
stop(options = {}) {
var done, waitForExecuting;
options = parser$5.load(options, this.stopDefaults);
waitForExecuting = (at) => {
var finished;
finished = () => {
var counts;
counts = this._states.counts;
return (counts[0] + counts[1] + counts[2] + counts[3]) === at;
};
return new this.Promise((resolve, reject) => {
if (finished()) {
return resolve();
} else {
return this.on("done", () => {
if (finished()) {
this.removeAllListeners("done");
return resolve();
}
});
}
});
};
done = options.dropWaitingJobs ? (this._run = function(index, next) {
return next.doDrop({
message: options.dropErrorMessage
});
}, this._drainOne = () => {
return this.Promise.resolve(null);
}, this._registerLock.schedule(() => {
return this._submitLock.schedule(() => {
var k, ref, v;
ref = this._scheduled;
for (k in ref) {
v = ref[k];
if (this.jobStatus(v.job.options.id) === "RUNNING") {
clearTimeout(v.timeout);
clearTimeout(v.expiration);
v.job.doDrop({
message: options.dropErrorMessage
});
}
}
this._dropAllQueued(options.dropErrorMessage);
return waitForExecuting(0);
});
})) : this.schedule({
priority: NUM_PRIORITIES$1 - 1,
weight: 0
}, () => {
return waitForExecuting(1);
});
this._receive = function(job) {
return job._reject(new Bottleneck.prototype.BottleneckError(options.enqueueErrorMessage));
};
this.stop = () => {
return this.Promise.reject(new Bottleneck.prototype.BottleneckError("stop() has already been called"));
};
return done;
}
async _addToQueue(job) {
var args, blocked, error, options, reachedHWM, shifted, strategy;
({args, options} = job);
try {
({reachedHWM, blocked, strategy} = (await this._store.__submit__(this.queued(), options.weight)));
} catch (error1) {
error = error1;
this.Events.trigger("debug", `Could not queue ${options.id}`, {args, options, error});
job.doDrop({error});
return false;
}
if (blocked) {
job.doDrop();
return true;
} else if (reachedHWM) {
shifted = strategy === Bottleneck.prototype.strategy.LEAK ? this._queues.shiftLastFrom(options.priority) : strategy === Bottleneck.prototype.strategy.OVERFLOW_PRIORITY ? this._queues.shiftLastFrom(options.priority + 1) : strategy === Bottleneck.prototype.strategy.OVERFLOW ? job : void 0;
if (shifted != null) {
shifted.doDrop();
}
if ((shifted == null) || strategy === Bottleneck.prototype.strategy.OVERFLOW) {
if (shifted == null) {
job.doDrop();
}
return reachedHWM;
}
}
job.doQueue(reachedHWM, blocked);
this._queues.push(job);
await this._drainAll();
return reachedHWM;
}
_receive(job) {
if (this._states.jobStatus(job.options.id) != null) {
job._reject(new Bottleneck.prototype.BottleneckError(`A job with the same id already exists (id=${job.options.id})`));
return false;
} else {
job.doReceive();
return this._submitLock.schedule(this._addToQueue, job);
}
}
submit(...args) {
var cb, fn, job, options, ref, ref1, task;
if (typeof args[0] === "function") {
ref = args, [fn, ...args] = ref, [cb] = splice.call(args, -1);
options = parser$5.load({}, this.jobDefaults);
} else {
ref1 = args, [options, fn, ...args] = ref1, [cb] = splice.call(args, -1);
options = parser$5.load(options, this.jobDefaults);
}
task = (...args) => {
return new this.Promise(function(resolve, reject) {
return fn(...args, function(...args) {
return (args[0] != null ? reject : resolve)(args);
});
});
};
job = new Job$1(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);
job.promise.then(function(args) {
return typeof cb === "function" ? cb(...args) : void 0;
}).catch(function(args) {
if (Array.isArray(args)) {
return typeof cb === "function" ? cb(...args) : void 0;
} else {
return typeof cb === "function" ? cb(args) : void 0;
}
});
return this._receive(job);
}
schedule(...args) {
var job, options, task;
if (typeof args[0] === "function") {
[task, ...args] = args;
options = {};
} else {
[options, task, ...args] = args;
}
job = new Job$1(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);
this._receive(job);
return job.promise;
}
wrap(fn) {
var schedule, wrapped;
schedule = this.schedule.bind(this);
wrapped = function(...args) {
return schedule(fn.bind(this), ...args);
};
wrapped.withOptions = function(options, ...args) {
return schedule(options, fn, ...args);
};
return wrapped;
}
async updateSettings(options = {}) {
await this._store.__updateSettings__(parser$5.overwrite(options, this.storeDefaults));
parser$5.overwrite(options, this.instanceDefaults, this);
return this;
}
currentReservoir() {
return this._store.__currentReservoir__();
}
incrementReservoir(incr = 0) {
return this._store.__incrementReservoir__(incr);
}
}
Bottleneck.default = Bottleneck;
Bottleneck.Events = Events$4;
Bottleneck.version = Bottleneck.prototype.version = require$$8.version;
Bottleneck.strategy = Bottleneck.prototype.strategy = {
LEAK: 1,
OVERFLOW: 2,
OVERFLOW_PRIORITY: 4,
BLOCK: 3
};
Bottleneck.BottleneckError = Bottleneck.prototype.BottleneckError = BottleneckError_1;
Bottleneck.Group = Bottleneck.prototype.Group = Group_1;
Bottleneck.RedisConnection = Bottleneck.prototype.RedisConnection = require$$2;
Bottleneck.IORedisConnection = Bottleneck.prototype.IORedisConnection = require$$3;
Bottleneck.Batcher = Bottleneck.prototype.Batcher = Batcher_1;
Bottleneck.prototype.jobDefaults = {
priority: DEFAULT_PRIORITY$1,
weight: 1,
expiration: null,
id: "<no-id>"
};
Bottleneck.prototype.storeDefaults = {
maxConcurrent: null,
minTime: 0,
highWater: null,
strategy: Bottleneck.prototype.strategy.LEAK,
penalty: null,
reservoir: null,
reservoirRefreshInterval: null,
reservoirRefreshAmount: null,
reservoirIncreaseInterval: null,
reservoirIncreaseAmount: null,
reservoirIncreaseMaximum: null
};
Bottleneck.prototype.localStoreDefaults = {
Promise: Promise,
timeout: null,
heartbeatInterval: 250
};
Bottleneck.prototype.redisStoreDefaults = {
Promise: Promise,
timeout: null,
heartbeatInterval: 5000,
clientTimeout: 10000,
Redis: null,
clientOptions: {},
clusterNodes: null,
clearDatastore: false,
connection: null
};
Bottleneck.prototype.instanceDefaults = {
datastore: "local",
connection: null,
id: "<no-id>",
rejectOnDrop: true,
trackDoneStatus: false,
Promise: Promise
};
Bottleneck.prototype.stopDefaults = {
enqueueErrorMessage: "This limiter has been stopped and cannot accept new jobs.",
dropWaitingJobs: true,
dropErrorMessage: "This limiter has been stopped."
};
return Bottleneck;
2021-01-08 20:47:49 +00:00
}).call(commonjsGlobal);
2021-01-08 20:47:49 +00:00
var Bottleneck_1 = Bottleneck;
2021-01-08 20:47:49 +00:00
var lib = Bottleneck_1;
2021-01-08 20:47:49 +00:00
return lib;
2021-01-08 20:47:49 +00:00
})));
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8932:
/***/ ((__unused_webpack_module, exports) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
class Deprecation extends Error {
constructor(message) {
super(message); // Maintains proper stack trace (only available on V8)
2021-01-08 20:47:49 +00:00
/* istanbul ignore next */
2021-01-08 20:47:49 +00:00
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
2021-01-08 20:47:49 +00:00
this.name = 'Deprecation';
}
2021-01-08 20:47:49 +00:00
}
exports.Deprecation = Deprecation;
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2437:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
/* @flow */
/*::
2021-01-08 20:47:49 +00:00
type DotenvParseOptions = {
debug?: boolean
2021-01-08 20:47:49 +00:00
}
// keys and values from src
type DotenvParseOutput = { [string]: string }
2021-01-08 20:47:49 +00:00
type DotenvConfigOptions = {
path?: string, // path to .env file
encoding?: string, // encoding of .env file
debug?: string // turn on logging for debugging purposes
}
2021-01-08 20:47:49 +00:00
type DotenvConfigOutput = {
parsed?: DotenvParseOutput,
error?: Error
}
2021-01-08 20:47:49 +00:00
*/
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const fs = __nccwpck_require__(7147)
const path = __nccwpck_require__(1017)
2021-01-08 20:47:49 +00:00
function log (message /*: string */) {
console.log(`[dotenv][DEBUG] ${message}`)
}
2021-01-08 20:47:49 +00:00
const NEWLINE = '\n'
const RE_INI_KEY_VAL = /^\s*([\w.-]+)\s*=\s*(.*)?\s*$/
const RE_NEWLINES = /\\n/g
const NEWLINES_MATCH = /\n|\r|\r\n/
2021-01-08 20:47:49 +00:00
// Parses src into an Object
function parse (src /*: string | Buffer */, options /*: ?DotenvParseOptions */) /*: DotenvParseOutput */ {
const debug = Boolean(options && options.debug)
const obj = {}
2021-01-08 20:47:49 +00:00
// convert Buffers before splitting into lines and processing
src.toString().split(NEWLINES_MATCH).forEach(function (line, idx) {
// matching "KEY' and 'VAL' in 'KEY=VAL'
const keyValueArr = line.match(RE_INI_KEY_VAL)
// matched?
if (keyValueArr != null) {
const key = keyValueArr[1]
// default undefined or missing values to empty string
let val = (keyValueArr[2] || '')
const end = val.length - 1
const isDoubleQuoted = val[0] === '"' && val[end] === '"'
const isSingleQuoted = val[0] === "'" && val[end] === "'"
2021-01-08 20:47:49 +00:00
// if single or double quoted, remove quotes
if (isSingleQuoted || isDoubleQuoted) {
val = val.substring(1, end)
2021-01-08 20:47:49 +00:00
// if double quoted, expand newlines
if (isDoubleQuoted) {
val = val.replace(RE_NEWLINES, NEWLINE)
}
} else {
// remove surrounding whitespace
val = val.trim()
}
2021-01-08 20:47:49 +00:00
obj[key] = val
} else if (debug) {
log(`did not match key and value when parsing line ${idx + 1}: ${line}`)
2021-01-08 20:47:49 +00:00
}
})
2021-01-08 20:47:49 +00:00
return obj
}
2021-01-08 20:47:49 +00:00
// Populates process.env from .env file
function config (options /*: ?DotenvConfigOptions */) /*: DotenvConfigOutput */ {
let dotenvPath = path.resolve(process.cwd(), '.env')
let encoding /*: string */ = 'utf8'
let debug = false
2021-01-08 20:47:49 +00:00
if (options) {
if (options.path != null) {
dotenvPath = options.path
2021-01-08 20:47:49 +00:00
}
if (options.encoding != null) {
encoding = options.encoding
2021-01-08 20:47:49 +00:00
}
if (options.debug != null) {
debug = true
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
try {
// specifying an encoding returns a string instead of a buffer
const parsed = parse(fs.readFileSync(dotenvPath, { encoding }), { debug })
2021-01-08 20:47:49 +00:00
Object.keys(parsed).forEach(function (key) {
if (!Object.prototype.hasOwnProperty.call(process.env, key)) {
process.env[key] = parsed[key]
} else if (debug) {
log(`"${key}" is already defined in \`process.env\` and will not be overwritten`)
}
})
2021-01-08 20:47:49 +00:00
return { parsed }
} catch (e) {
return { error: e }
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
module.exports.config = config
module.exports.parse = parse
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 8878:
/***/ (function(module) {
/*!
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
* @license Licensed under MIT license
* See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
* @version 3.3.1
*/
(function (global, factory) {
true ? module.exports = factory() :
0;
}(this, (function () { 'use strict';
function objectOrFunction(x) {
return typeof x === 'function' || typeof x === 'object' && x !== null;
}
function isFunction(x) {
return typeof x === 'function';
}
var _isArray = undefined;
if (!Array.isArray) {
_isArray = function (x) {
return Object.prototype.toString.call(x) === '[object Array]';
};
} else {
_isArray = Array.isArray;
}
var isArray = _isArray;
var len = 0;
var vertxNext = undefined;
var customSchedulerFn = undefined;
var asap = function asap(callback, arg) {
queue[len] = callback;
queue[len + 1] = arg;
len += 2;
if (len === 2) {
// If len is 2, that means that we need to schedule an async flush.
// If additional callbacks are queued before the queue is flushed, they
// will be processed by this flush that we are scheduling.
if (customSchedulerFn) {
customSchedulerFn(flush);
} else {
scheduleFlush();
}
}
};
function setScheduler(scheduleFn) {
customSchedulerFn = scheduleFn;
}
function setAsap(asapFn) {
asap = asapFn;
}
var browserWindow = typeof window !== 'undefined' ? window : undefined;
var browserGlobal = browserWindow || {};
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';
// test for web worker but not in IE10
var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
// node
function useNextTick() {
// node version 0.10.x displays a deprecation warning when nextTick is used recursively
// see https://github.com/cujojs/when/issues/410 for details
return function () {
return process.nextTick(flush);
};
}
// vertx
function useVertxTimer() {
return function () {
vertxNext(flush);
};
}
function useMutationObserver() {
var iterations = 0;
var observer = new BrowserMutationObserver(flush);
var node = document.createTextNode('');
observer.observe(node, { characterData: true });
return function () {
node.data = iterations = ++iterations % 2;
};
}
// web worker
function useMessageChannel() {
var channel = new MessageChannel();
channel.port1.onmessage = flush;
return function () {
return channel.port2.postMessage(0);
};
}
function useSetTimeout() {
// Store setTimeout reference so es6-promise will be unaffected by
// other code modifying setTimeout (like sinon.useFakeTimers())
var globalSetTimeout = setTimeout;
return function () {
return globalSetTimeout(flush, 1);
};
}
var queue = new Array(1000);
function flush() {
for (var i = 0; i < len; i += 2) {
var callback = queue[i];
var arg = queue[i + 1];
callback(arg);
queue[i] = undefined;
queue[i + 1] = undefined;
}
len = 0;
}
function attemptVertx() {
try {
var r = require;
var vertx = r('vertx');
vertxNext = vertx.runOnLoop || vertx.runOnContext;
return useVertxTimer();
} catch (e) {
return useSetTimeout();
}
}
var scheduleFlush = undefined;
// Decide what async method to use to triggering processing of queued callbacks:
if (isNode) {
scheduleFlush = useNextTick();
} else if (BrowserMutationObserver) {
scheduleFlush = useMutationObserver();
} else if (isWorker) {
scheduleFlush = useMessageChannel();
} else if (browserWindow === undefined && "function" === 'function') {
scheduleFlush = attemptVertx();
} else {
scheduleFlush = useSetTimeout();
}
function then(onFulfillment, onRejection) {
var _arguments = arguments;
var parent = this;
var child = new this.constructor(noop);
if (child[PROMISE_ID] === undefined) {
makePromise(child);
}
var _state = parent._state;
if (_state) {
(function () {
var callback = _arguments[_state - 1];
asap(function () {
return invokeCallback(_state, child, callback, parent._result);
});
})();
} else {
subscribe(parent, child, onFulfillment, onRejection);
}
return child;
}
/**
`Promise.resolve` returns a promise that will become resolved with the
passed `value`. It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
resolve(1);
});
promise.then(function(value){
// value === 1
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.resolve(1);
promise.then(function(value){
// value === 1
});
```
@method resolve
@static
@param {Any} value value that the returned promise will be resolved with
Useful for tooling.
@return {Promise} a promise that will become fulfilled with the given
`value`
*/
function resolve(object) {
/*jshint validthis:true */
var Constructor = this;
if (object && typeof object === 'object' && object.constructor === Constructor) {
return object;
}
var promise = new Constructor(noop);
_resolve(promise, object);
return promise;
}
var PROMISE_ID = Math.random().toString(36).substring(16);
function noop() {}
var PENDING = void 0;
var FULFILLED = 1;
var REJECTED = 2;
var GET_THEN_ERROR = new ErrorObject();
function selfFulfillment() {
return new TypeError("You cannot resolve a promise with itself");
}
function cannotReturnOwn() {
return new TypeError('A promises callback cannot return that same promise.');
}
function getThen(promise) {
try {
return promise.then;
} catch (error) {
GET_THEN_ERROR.error = error;
return GET_THEN_ERROR;
}
}
function tryThen(then, value, fulfillmentHandler, rejectionHandler) {
try {
then.call(value, fulfillmentHandler, rejectionHandler);
} catch (e) {
return e;
}
}
function handleForeignThenable(promise, thenable, then) {
asap(function (promise) {
var sealed = false;
var error = tryThen(then, thenable, function (value) {
if (sealed) {
return;
}
sealed = true;
if (thenable !== value) {
_resolve(promise, value);
} else {
fulfill(promise, value);
}
}, function (reason) {
if (sealed) {
return;
}
sealed = true;
_reject(promise, reason);
}, 'Settle: ' + (promise._label || ' unknown promise'));
if (!sealed && error) {
sealed = true;
_reject(promise, error);
}
}, promise);
}
function handleOwnThenable(promise, thenable) {
if (thenable._state === FULFILLED) {
fulfill(promise, thenable._result);
} else if (thenable._state === REJECTED) {
_reject(promise, thenable._result);
} else {
subscribe(thenable, undefined, function (value) {
return _resolve(promise, value);
}, function (reason) {
return _reject(promise, reason);
});
}
}
function handleMaybeThenable(promise, maybeThenable, then$$) {
if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {
handleOwnThenable(promise, maybeThenable);
} else {
if (then$$ === GET_THEN_ERROR) {
_reject(promise, GET_THEN_ERROR.error);
} else if (then$$ === undefined) {
fulfill(promise, maybeThenable);
} else if (isFunction(then$$)) {
handleForeignThenable(promise, maybeThenable, then$$);
} else {
fulfill(promise, maybeThenable);
}
}
}
function _resolve(promise, value) {
if (promise === value) {
_reject(promise, selfFulfillment());
} else if (objectOrFunction(value)) {
handleMaybeThenable(promise, value, getThen(value));
} else {
fulfill(promise, value);
}
}
function publishRejection(promise) {
if (promise._onerror) {
promise._onerror(promise._result);
}
publish(promise);
}
function fulfill(promise, value) {
if (promise._state !== PENDING) {
return;
}
promise._result = value;
promise._state = FULFILLED;
if (promise._subscribers.length !== 0) {
asap(publish, promise);
}
}
function _reject(promise, reason) {
if (promise._state !== PENDING) {
return;
}
promise._state = REJECTED;
promise._result = reason;
asap(publishRejection, promise);
}
function subscribe(parent, child, onFulfillment, onRejection) {
var _subscribers = parent._subscribers;
var length = _subscribers.length;
parent._onerror = null;
_subscribers[length] = child;
_subscribers[length + FULFILLED] = onFulfillment;
_subscribers[length + REJECTED] = onRejection;
if (length === 0 && parent._state) {
asap(publish, parent);
}
}
function publish(promise) {
var subscribers = promise._subscribers;
var settled = promise._state;
if (subscribers.length === 0) {
return;
}
var child = undefined,
callback = undefined,
detail = promise._result;
for (var i = 0; i < subscribers.length; i += 3) {
child = subscribers[i];
callback = subscribers[i + settled];
if (child) {
invokeCallback(settled, child, callback, detail);
} else {
callback(detail);
}
}
promise._subscribers.length = 0;
}
function ErrorObject() {
this.error = null;
}
var TRY_CATCH_ERROR = new ErrorObject();
function tryCatch(callback, detail) {
try {
return callback(detail);
} catch (e) {
TRY_CATCH_ERROR.error = e;
return TRY_CATCH_ERROR;
}
}
function invokeCallback(settled, promise, callback, detail) {
var hasCallback = isFunction(callback),
value = undefined,
error = undefined,
succeeded = undefined,
failed = undefined;
if (hasCallback) {
value = tryCatch(callback, detail);
if (value === TRY_CATCH_ERROR) {
failed = true;
error = value.error;
value = null;
} else {
succeeded = true;
}
if (promise === value) {
_reject(promise, cannotReturnOwn());
return;
}
} else {
value = detail;
succeeded = true;
}
if (promise._state !== PENDING) {
// noop
} else if (hasCallback && succeeded) {
_resolve(promise, value);
} else if (failed) {
_reject(promise, error);
} else if (settled === FULFILLED) {
fulfill(promise, value);
} else if (settled === REJECTED) {
_reject(promise, value);
}
}
function initializePromise(promise, resolver) {
try {
resolver(function resolvePromise(value) {
_resolve(promise, value);
}, function rejectPromise(reason) {
_reject(promise, reason);
});
} catch (e) {
_reject(promise, e);
}
}
var id = 0;
function nextId() {
return id++;
}
function makePromise(promise) {
promise[PROMISE_ID] = id++;
promise._state = undefined;
promise._result = undefined;
promise._subscribers = [];
}
function Enumerator(Constructor, input) {
this._instanceConstructor = Constructor;
this.promise = new Constructor(noop);
if (!this.promise[PROMISE_ID]) {
makePromise(this.promise);
}
if (isArray(input)) {
this._input = input;
this.length = input.length;
this._remaining = input.length;
this._result = new Array(this.length);
if (this.length === 0) {
fulfill(this.promise, this._result);
} else {
this.length = this.length || 0;
this._enumerate();
if (this._remaining === 0) {
fulfill(this.promise, this._result);
}
}
} else {
_reject(this.promise, validationError());
}
}
function validationError() {
return new Error('Array Methods must be provided an Array');
};
Enumerator.prototype._enumerate = function () {
var length = this.length;
var _input = this._input;
for (var i = 0; this._state === PENDING && i < length; i++) {
this._eachEntry(_input[i], i);
}
};
Enumerator.prototype._eachEntry = function (entry, i) {
var c = this._instanceConstructor;
var resolve$$ = c.resolve;
if (resolve$$ === resolve) {
var _then = getThen(entry);
if (_then === then && entry._state !== PENDING) {
this._settledAt(entry._state, i, entry._result);
} else if (typeof _then !== 'function') {
this._remaining--;
this._result[i] = entry;
} else if (c === Promise) {
var promise = new c(noop);
handleMaybeThenable(promise, entry, _then);
this._willSettleAt(promise, i);
} else {
this._willSettleAt(new c(function (resolve$$) {
return resolve$$(entry);
}), i);
}
} else {
this._willSettleAt(resolve$$(entry), i);
}
};
Enumerator.prototype._settledAt = function (state, i, value) {
var promise = this.promise;
if (promise._state === PENDING) {
this._remaining--;
if (state === REJECTED) {
_reject(promise, value);
} else {
this._result[i] = value;
}
}
if (this._remaining === 0) {
fulfill(promise, this._result);
}
};
Enumerator.prototype._willSettleAt = function (promise, i) {
var enumerator = this;
subscribe(promise, undefined, function (value) {
return enumerator._settledAt(FULFILLED, i, value);
}, function (reason) {
return enumerator._settledAt(REJECTED, i, reason);
});
};
/**
`Promise.all` accepts an array of promises, and returns a new promise which
is fulfilled with an array of fulfillment values for the passed promises, or
rejected with the reason of the first passed promise to be rejected. It casts all
elements of the passed iterable to promises as it runs this algorithm.
Example:
```javascript
let promise1 = resolve(1);
let promise2 = resolve(2);
let promise3 = resolve(3);
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// The array here would be [ 1, 2, 3 ];
});
```
If any of the `promises` given to `all` are rejected, the first promise
that is rejected will be given as an argument to the returned promises's
rejection handler. For example:
Example:
```javascript
let promise1 = resolve(1);
let promise2 = reject(new Error("2"));
let promise3 = reject(new Error("3"));
let promises = [ promise1, promise2, promise3 ];
Promise.all(promises).then(function(array){
// Code here never runs because there are rejected promises!
}, function(error) {
// error.message === "2"
});
```
@method all
@static
@param {Array} entries array of promises
@param {String} label optional string for labeling the promise.
Useful for tooling.
@return {Promise} promise that is fulfilled when all `promises` have been
fulfilled, or rejected if any of them become rejected.
@static
*/
function all(entries) {
return new Enumerator(this, entries).promise;
}
/**
`Promise.race` returns a new promise which is settled in the same way as the
first passed promise to settle.
Example:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 2');
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// result === 'promise 2' because it was resolved before promise1
// was resolved.
});
```
`Promise.race` is deterministic in that only the state of the first
settled promise matters. For example, even if other promises given to the
`promises` array argument are resolved, but the first settled promise has
become rejected before the other promises became fulfilled, the returned
promise will become rejected:
```javascript
let promise1 = new Promise(function(resolve, reject){
setTimeout(function(){
resolve('promise 1');
}, 200);
});
let promise2 = new Promise(function(resolve, reject){
setTimeout(function(){
reject(new Error('promise 2'));
}, 100);
});
Promise.race([promise1, promise2]).then(function(result){
// Code here never runs
}, function(reason){
// reason.message === 'promise 2' because promise 2 became rejected before
// promise 1 became fulfilled
});
```
An example real-world use case is implementing timeouts:
```javascript
Promise.race([ajax('foo.json'), timeout(5000)])
```
@method race
@static
@param {Array} promises array of promises to observe
Useful for tooling.
@return {Promise} a promise which settles in the same way as the first passed
promise to settle.
*/
function race(entries) {
/*jshint validthis:true */
var Constructor = this;
if (!isArray(entries)) {
return new Constructor(function (_, reject) {
return reject(new TypeError('You must pass an array to race.'));
});
} else {
return new Constructor(function (resolve, reject) {
var length = entries.length;
for (var i = 0; i < length; i++) {
Constructor.resolve(entries[i]).then(resolve, reject);
}
});
}
}
/**
`Promise.reject` returns a promise rejected with the passed `reason`.
It is shorthand for the following:
```javascript
let promise = new Promise(function(resolve, reject){
reject(new Error('WHOOPS'));
});
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
Instead of writing the above, your code now simply becomes the following:
```javascript
let promise = Promise.reject(new Error('WHOOPS'));
promise.then(function(value){
// Code here doesn't run because the promise is rejected!
}, function(reason){
// reason.message === 'WHOOPS'
});
```
@method reject
@static
@param {Any} reason value that the returned promise will be rejected with.
Useful for tooling.
@return {Promise} a promise rejected with the given `reason`.
*/
function reject(reason) {
/*jshint validthis:true */
var Constructor = this;
var promise = new Constructor(noop);
_reject(promise, reason);
return promise;
}
function needsResolver() {
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
}
function needsNew() {
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
}
/**
Promise objects represent the eventual result of an asynchronous operation. The
primary way of interacting with a promise is through its `then` method, which
registers callbacks to receive either a promise's eventual value or the reason
why the promise cannot be fulfilled.
Terminology
-----------
- `promise` is an object or function with a `then` method whose behavior conforms to this specification.
- `thenable` is an object or function that defines a `then` method.
- `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
- `exception` is a value that is thrown using the throw statement.
- `reason` is a value that indicates why a promise was rejected.
- `settled` the final resting state of a promise, fulfilled or rejected.
A promise can be in one of three states: pending, fulfilled, or rejected.
Promises that are fulfilled have a fulfillment value and are in the fulfilled
state. Promises that are rejected have a rejection reason and are in the
rejected state. A fulfillment value is never a thenable.
Promises can also be said to *resolve* a value. If this value is also a
promise, then the original promise's settled state will match the value's
settled state. So a promise that *resolves* a promise that rejects will
itself reject, and a promise that *resolves* a promise that fulfills will
itself fulfill.
Basic Usage:
------------
```js
let promise = new Promise(function(resolve, reject) {
// on success
resolve(value);
// on failure
reject(reason);
});
promise.then(function(value) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Advanced Usage:
---------------
Promises shine when abstracting away asynchronous interactions such as
`XMLHttpRequest`s.
```js
function getJSON(url) {
return new Promise(function(resolve, reject){
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = handler;
xhr.responseType = 'json';
xhr.setRequestHeader('Accept', 'application/json');
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
}
}
};
});
}
getJSON('/posts.json').then(function(json) {
// on fulfillment
}, function(reason) {
// on rejection
});
```
Unlike callbacks, promises are great composable primitives.
```js
Promise.all([
getJSON('/posts'),
getJSON('/comments')
]).then(function(values){
values[0] // => postsJSON
values[1] // => commentsJSON
return values;
});
```
@class Promise
@param {function} resolver
Useful for tooling.
@constructor
*/
function Promise(resolver) {
this[PROMISE_ID] = nextId();
this._result = this._state = undefined;
this._subscribers = [];
if (noop !== resolver) {
typeof resolver !== 'function' && needsResolver();
this instanceof Promise ? initializePromise(this, resolver) : needsNew();
}
}
Promise.all = all;
Promise.race = race;
Promise.resolve = resolve;
Promise.reject = reject;
Promise._setScheduler = setScheduler;
Promise._setAsap = setAsap;
Promise._asap = asap;
Promise.prototype = {
constructor: Promise,
/**
The primary way of interacting with a promise is through its `then` method,
which registers callbacks to receive either a promise's eventual value or the
reason why the promise cannot be fulfilled.
```js
findUser().then(function(user){
// user is available
}, function(reason){
// user is unavailable, and you are given the reason why
});
```
Chaining
--------
The return value of `then` is itself a promise. This second, 'downstream'
promise is resolved with the return value of the first promise's fulfillment
or rejection handler, or rejected if the handler throws an exception.
```js
findUser().then(function (user) {
return user.name;
}, function (reason) {
return 'default name';
}).then(function (userName) {
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
// will be `'default name'`
});
findUser().then(function (user) {
throw new Error('Found user, but still unhappy');
}, function (reason) {
throw new Error('`findUser` rejected and we're unhappy');
}).then(function (value) {
// never reached
}, function (reason) {
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
});
```
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
```js
findUser().then(function (user) {
throw new PedagogicalException('Upstream error');
}).then(function (value) {
// never reached
}).then(function (value) {
// never reached
}, function (reason) {
// The `PedgagocialException` is propagated all the way down to here
});
```
Assimilation
------------
Sometimes the value you want to propagate to a downstream promise can only be
retrieved asynchronously. This can be achieved by returning a promise in the
fulfillment or rejection handler. The downstream promise will then be pending
until the returned promise is settled. This is called *assimilation*.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// The user's comments are now available
});
```
If the assimliated promise rejects, then the downstream promise will also reject.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// If `findCommentsByAuthor` fulfills, we'll have the value here
}, function (reason) {
// If `findCommentsByAuthor` rejects, we'll have the reason here
});
```
Simple Example
--------------
Synchronous Example
```javascript
let result;
try {
result = findResult();
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
findResult(function(result, err){
if (err) {
// failure
} else {
// success
}
});
```
Promise Example;
```javascript
findResult().then(function(result){
// success
}, function(reason){
// failure
});
```
Advanced Example
--------------
Synchronous Example
```javascript
let author, books;
try {
author = findAuthor();
books = findBooksByAuthor(author);
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
function foundBooks(books) {
}
function failure(reason) {
}
findAuthor(function(author, err){
if (err) {
failure(err);
// failure
} else {
try {
findBoooksByAuthor(author, function(books, err) {
if (err) {
failure(err);
} else {
try {
foundBooks(books);
} catch(reason) {
failure(reason);
}
}
});
} catch(error) {
failure(err);
}
// success
}
});
```
Promise Example;
```javascript
findAuthor().
then(findBooksByAuthor).
then(function(books){
// found books
}).catch(function(reason){
// something went wrong
});
```
@method then
@param {Function} onFulfilled
@param {Function} onRejected
Useful for tooling.
@return {Promise}
*/
then: then,
/**
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
as the catch block of a try/catch statement.
```js
function findAuthor(){
throw new Error('couldn't find that author');
}
// synchronous
try {
findAuthor();
} catch(reason) {
// something went wrong
}
// async with promises
findAuthor().catch(function(reason){
// something went wrong
});
```
@method catch
@param {Function} onRejection
Useful for tooling.
@return {Promise}
*/
'catch': function _catch(onRejection) {
return this.then(null, onRejection);
}
};
function polyfill() {
var local = undefined;
if (typeof global !== 'undefined') {
local = global;
} else if (typeof self !== 'undefined') {
local = self;
} else {
try {
local = Function('return this')();
} catch (e) {
throw new Error('polyfill failed because global object is unavailable in this environment');
}
}
var P = local.Promise;
if (P) {
var promiseToString = null;
try {
promiseToString = Object.prototype.toString.call(P.resolve());
} catch (e) {
// silently ignored
}
if (promiseToString === '[object Promise]' && !P.cast) {
return;
}
}
local.Promise = Promise;
}
polyfill();
// Strange compat..
Promise.polyfill = polyfill;
Promise.Promise = Promise;
return Promise;
})));
//# sourceMappingURL=es6-promise.map
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
/***/ 9618:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const mkdirsSync = (__nccwpck_require__(8605).mkdirsSync)
const utimesMillisSync = (__nccwpck_require__(2548).utimesMillisSync)
const stat = __nccwpck_require__(3901)
2021-01-08 20:47:49 +00:00
function copySync (src, dest, opts) {
if (typeof opts === 'function') {
opts = { filter: opts }
}
2021-01-08 20:47:49 +00:00
opts = opts || {}
opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
2021-01-08 20:47:49 +00:00
// Warn about using preserveTimestamps on 32-bit node
if (opts.preserveTimestamps && process.arch === 'ia32') {
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
see https://github.com/jprichardson/node-fs-extra/issues/269`)
2021-01-08 20:47:49 +00:00
}
const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)
stat.checkParentPathsSync(src, srcStat, dest, 'copy')
return handleFilterAndCopy(destStat, src, dest, opts)
2021-01-08 20:47:49 +00:00
}
function handleFilterAndCopy (destStat, src, dest, opts) {
if (opts.filter && !opts.filter(src, dest)) return
const destParent = path.dirname(dest)
if (!fs.existsSync(destParent)) mkdirsSync(destParent)
return getStats(destStat, src, dest, opts)
}
2021-01-08 20:47:49 +00:00
function startCopy (destStat, src, dest, opts) {
if (opts.filter && !opts.filter(src, dest)) return
return getStats(destStat, src, dest, opts)
}
2021-01-08 20:47:49 +00:00
function getStats (destStat, src, dest, opts) {
const statSync = opts.dereference ? fs.statSync : fs.lstatSync
const srcStat = statSync(src)
2021-01-08 20:47:49 +00:00
if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
else if (srcStat.isFile() ||
srcStat.isCharacterDevice() ||
srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)
else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)
throw new Error(`Unknown file: ${src}`)
}
2021-01-08 20:47:49 +00:00
function onFile (srcStat, destStat, src, dest, opts) {
if (!destStat) return copyFile(srcStat, src, dest, opts)
return mayCopyFile(srcStat, src, dest, opts)
}
2021-01-08 20:47:49 +00:00
function mayCopyFile (srcStat, src, dest, opts) {
if (opts.overwrite) {
fs.unlinkSync(dest)
return copyFile(srcStat, src, dest, opts)
} else if (opts.errorOnExist) {
throw new Error(`'${dest}' already exists`)
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
function copyFile (srcStat, src, dest, opts) {
fs.copyFileSync(src, dest)
if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
return setDestMode(dest, srcStat.mode)
}
2021-01-08 20:47:49 +00:00
function handleTimestamps (srcMode, src, dest) {
// Make sure the file is writable before setting the timestamp
// otherwise open fails with EPERM when invoked with 'r+'
// (through utimes call)
if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
return setDestTimestamps(src, dest)
}
2021-01-08 20:47:49 +00:00
function fileIsNotWritable (srcMode) {
return (srcMode & 0o200) === 0
}
2021-01-08 20:47:49 +00:00
function makeFileWritable (dest, srcMode) {
return setDestMode(dest, srcMode | 0o200)
}
2021-01-08 20:47:49 +00:00
function setDestMode (dest, srcMode) {
return fs.chmodSync(dest, srcMode)
}
2021-01-08 20:47:49 +00:00
function setDestTimestamps (src, dest) {
// The initial srcStat.atime cannot be trusted
// because it is modified by the read(2) system call
// (See https://nodejs.org/api/fs.html#fs_stat_time_values)
const updatedSrcStat = fs.statSync(src)
return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
2021-01-08 20:47:49 +00:00
}
function onDir (srcStat, destStat, src, dest, opts) {
if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
return copyDir(src, dest, opts)
}
2021-01-08 20:47:49 +00:00
function mkDirAndCopy (srcMode, src, dest, opts) {
fs.mkdirSync(dest)
copyDir(src, dest, opts)
return setDestMode(dest, srcMode)
}
2021-01-08 20:47:49 +00:00
function copyDir (src, dest, opts) {
fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
}
2021-01-08 20:47:49 +00:00
function copyDirItem (item, src, dest, opts) {
const srcItem = path.join(src, item)
const destItem = path.join(dest, item)
const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)
return startCopy(destStat, srcItem, destItem, opts)
2021-01-08 20:47:49 +00:00
}
function onLink (destStat, src, dest, opts) {
let resolvedSrc = fs.readlinkSync(src)
if (opts.dereference) {
resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
}
2021-01-08 20:47:49 +00:00
if (!destStat) {
return fs.symlinkSync(resolvedSrc, dest)
} else {
let resolvedDest
try {
resolvedDest = fs.readlinkSync(dest)
} catch (err) {
// dest exists and is a regular file or directory,
// Windows may throw UNKNOWN error. If dest already exists,
// fs throws error anyway, so no need to guard against it here.
if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
throw err
2021-01-08 20:47:49 +00:00
}
if (opts.dereference) {
resolvedDest = path.resolve(process.cwd(), resolvedDest)
2021-01-08 20:47:49 +00:00
}
if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
2021-01-08 20:47:49 +00:00
}
// prevent copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents
// and therefore a broken symlink would be created.
if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
}
return copyLink(resolvedSrc, dest)
2021-01-08 20:47:49 +00:00
}
}
function copyLink (resolvedSrc, dest) {
fs.unlinkSync(dest)
return fs.symlinkSync(resolvedSrc, dest)
}
2021-01-08 20:47:49 +00:00
module.exports = copySync
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8834:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const mkdirs = (__nccwpck_require__(8605).mkdirs)
const pathExists = (__nccwpck_require__(3835).pathExists)
const utimesMillis = (__nccwpck_require__(2548).utimesMillis)
const stat = __nccwpck_require__(3901)
function copy (src, dest, opts, cb) {
if (typeof opts === 'function' && !cb) {
cb = opts
opts = {}
} else if (typeof opts === 'function') {
opts = { filter: opts }
2021-01-08 20:47:49 +00:00
}
cb = cb || function () {}
opts = opts || {}
2021-01-08 20:47:49 +00:00
opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
2021-01-08 20:47:49 +00:00
// Warn about using preserveTimestamps on 32-bit node
if (opts.preserveTimestamps && process.arch === 'ia32') {
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
see https://github.com/jprichardson/node-fs-extra/issues/269`)
}
2021-01-08 20:47:49 +00:00
stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {
if (err) return cb(err)
const { srcStat, destStat } = stats
stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
if (err) return cb(err)
if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)
return checkParentDir(destStat, src, dest, opts, cb)
})
})
}
2021-01-08 20:47:49 +00:00
function checkParentDir (destStat, src, dest, opts, cb) {
const destParent = path.dirname(dest)
pathExists(destParent, (err, dirExists) => {
if (err) return cb(err)
if (dirExists) return getStats(destStat, src, dest, opts, cb)
mkdirs(destParent, err => {
if (err) return cb(err)
return getStats(destStat, src, dest, opts, cb)
})
})
}
2021-01-08 20:47:49 +00:00
function handleFilter (onInclude, destStat, src, dest, opts, cb) {
Promise.resolve(opts.filter(src, dest)).then(include => {
if (include) return onInclude(destStat, src, dest, opts, cb)
return cb()
}, error => cb(error))
}
2021-01-08 20:47:49 +00:00
function startCopy (destStat, src, dest, opts, cb) {
if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)
return getStats(destStat, src, dest, opts, cb)
}
2021-01-08 20:47:49 +00:00
function getStats (destStat, src, dest, opts, cb) {
const stat = opts.dereference ? fs.stat : fs.lstat
stat(src, (err, srcStat) => {
if (err) return cb(err)
2021-01-08 20:47:49 +00:00
if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)
else if (srcStat.isFile() ||
srcStat.isCharacterDevice() ||
srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)
else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)
else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))
else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))
return cb(new Error(`Unknown file: ${src}`))
})
}
2021-01-08 20:47:49 +00:00
function onFile (srcStat, destStat, src, dest, opts, cb) {
if (!destStat) return copyFile(srcStat, src, dest, opts, cb)
return mayCopyFile(srcStat, src, dest, opts, cb)
}
2021-01-08 20:47:49 +00:00
function mayCopyFile (srcStat, src, dest, opts, cb) {
if (opts.overwrite) {
fs.unlink(dest, err => {
if (err) return cb(err)
return copyFile(srcStat, src, dest, opts, cb)
})
} else if (opts.errorOnExist) {
return cb(new Error(`'${dest}' already exists`))
} else return cb()
}
2021-01-08 20:47:49 +00:00
function copyFile (srcStat, src, dest, opts, cb) {
fs.copyFile(src, dest, err => {
if (err) return cb(err)
if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)
return setDestMode(dest, srcStat.mode, cb)
})
}
2021-01-08 20:47:49 +00:00
function handleTimestampsAndMode (srcMode, src, dest, cb) {
// Make sure the file is writable before setting the timestamp
// otherwise open fails with EPERM when invoked with 'r+'
// (through utimes call)
if (fileIsNotWritable(srcMode)) {
return makeFileWritable(dest, srcMode, err => {
if (err) return cb(err)
return setDestTimestampsAndMode(srcMode, src, dest, cb)
})
2021-01-08 20:47:49 +00:00
}
return setDestTimestampsAndMode(srcMode, src, dest, cb)
}
2021-01-08 20:47:49 +00:00
function fileIsNotWritable (srcMode) {
return (srcMode & 0o200) === 0
2021-01-08 20:47:49 +00:00
}
function makeFileWritable (dest, srcMode, cb) {
return setDestMode(dest, srcMode | 0o200, cb)
}
2021-01-08 20:47:49 +00:00
function setDestTimestampsAndMode (srcMode, src, dest, cb) {
setDestTimestamps(src, dest, err => {
if (err) return cb(err)
return setDestMode(dest, srcMode, cb)
})
}
2021-01-08 20:47:49 +00:00
function setDestMode (dest, srcMode, cb) {
return fs.chmod(dest, srcMode, cb)
}
2021-01-08 20:47:49 +00:00
function setDestTimestamps (src, dest, cb) {
// The initial srcStat.atime cannot be trusted
// because it is modified by the read(2) system call
// (See https://nodejs.org/api/fs.html#fs_stat_time_values)
fs.stat(src, (err, updatedSrcStat) => {
if (err) return cb(err)
return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)
})
}
2021-01-08 20:47:49 +00:00
function onDir (srcStat, destStat, src, dest, opts, cb) {
if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)
return copyDir(src, dest, opts, cb)
}
2021-01-08 20:47:49 +00:00
function mkDirAndCopy (srcMode, src, dest, opts, cb) {
fs.mkdir(dest, err => {
if (err) return cb(err)
copyDir(src, dest, opts, err => {
if (err) return cb(err)
return setDestMode(dest, srcMode, cb)
})
})
}
2021-01-08 20:47:49 +00:00
function copyDir (src, dest, opts, cb) {
fs.readdir(src, (err, items) => {
if (err) return cb(err)
return copyDirItems(items, src, dest, opts, cb)
})
}
2021-01-08 20:47:49 +00:00
function copyDirItems (items, src, dest, opts, cb) {
const item = items.pop()
if (!item) return cb()
return copyDirItem(items, item, src, dest, opts, cb)
}
function copyDirItem (items, item, src, dest, opts, cb) {
const srcItem = path.join(src, item)
const destItem = path.join(dest, item)
stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {
if (err) return cb(err)
const { destStat } = stats
startCopy(destStat, srcItem, destItem, opts, err => {
if (err) return cb(err)
return copyDirItems(items, src, dest, opts, cb)
})
})
}
function onLink (destStat, src, dest, opts, cb) {
fs.readlink(src, (err, resolvedSrc) => {
if (err) return cb(err)
if (opts.dereference) {
resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
}
2021-01-08 20:47:49 +00:00
if (!destStat) {
return fs.symlink(resolvedSrc, dest, cb)
2021-01-08 20:47:49 +00:00
} else {
fs.readlink(dest, (err, resolvedDest) => {
if (err) {
// dest exists and is a regular file or directory,
// Windows may throw UNKNOWN error. If dest already exists,
// fs throws error anyway, so no need to guard against it here.
if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)
return cb(err)
}
if (opts.dereference) {
resolvedDest = path.resolve(process.cwd(), resolvedDest)
}
if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))
}
2021-01-08 20:47:49 +00:00
// do not copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents
// and therefore a broken symlink would be created.
if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
}
return copyLink(resolvedSrc, dest, cb)
})
}
})
2021-01-08 20:47:49 +00:00
}
function copyLink (resolvedSrc, dest, cb) {
fs.unlink(dest, err => {
if (err) return cb(err)
return fs.symlink(resolvedSrc, dest, cb)
})
}
2021-01-08 20:47:49 +00:00
module.exports = copy
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1335:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
module.exports = {
2022-03-13 09:46:59 +00:00
copy: u(__nccwpck_require__(8834)),
copySync: __nccwpck_require__(9618)
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 6970:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromPromise)
const fs = __nccwpck_require__(1176)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const mkdir = __nccwpck_require__(8605)
const remove = __nccwpck_require__(7357)
2021-01-08 20:47:49 +00:00
const emptyDir = u(async function emptyDir (dir) {
let items
try {
items = await fs.readdir(dir)
} catch {
return mkdir.mkdirs(dir)
}
2021-01-08 20:47:49 +00:00
return Promise.all(items.map(item => remove.remove(path.join(dir, item))))
})
2021-01-08 20:47:49 +00:00
function emptyDirSync (dir) {
let items
try {
items = fs.readdirSync(dir)
} catch {
return mkdir.mkdirsSync(dir)
2021-01-08 20:47:49 +00:00
}
items.forEach(item => {
item = path.join(dir, item)
remove.removeSync(item)
})
2021-01-08 20:47:49 +00:00
}
module.exports = {
emptyDirSync,
emptydirSync: emptyDirSync,
emptyDir,
emptydir: emptyDir
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2164:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const path = __nccwpck_require__(1017)
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const mkdir = __nccwpck_require__(8605)
2021-01-08 20:47:49 +00:00
function createFile (file, callback) {
function makeFile () {
fs.writeFile(file, '', err => {
if (err) return callback(err)
callback()
})
}
2021-01-08 20:47:49 +00:00
fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
if (!err && stats.isFile()) return callback()
const dir = path.dirname(file)
fs.stat(dir, (err, stats) => {
if (err) {
// if the directory doesn't exist, make it
if (err.code === 'ENOENT') {
return mkdir.mkdirs(dir, err => {
if (err) return callback(err)
makeFile()
})
}
return callback(err)
}
2021-01-08 20:47:49 +00:00
if (stats.isDirectory()) makeFile()
else {
// parent is not a directory
// This is just to cause an internal ENOTDIR error to be thrown
fs.readdir(dir, err => {
if (err) return callback(err)
})
2021-01-08 20:47:49 +00:00
}
})
})
}
function createFileSync (file) {
let stats
try {
stats = fs.statSync(file)
} catch {}
if (stats && stats.isFile()) return
const dir = path.dirname(file)
try {
if (!fs.statSync(dir).isDirectory()) {
// parent is not a directory
// This is just to cause an internal ENOTDIR error to be thrown
fs.readdirSync(dir)
2021-01-08 20:47:49 +00:00
}
} catch (err) {
// If the stat call above failed because the directory doesn't exist, create it
if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
else throw err
}
2021-01-08 20:47:49 +00:00
fs.writeFileSync(file, '')
}
2021-01-08 20:47:49 +00:00
module.exports = {
createFile: u(createFile),
createFileSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 55:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
const { createFile, createFileSync } = __nccwpck_require__(2164)
const { createLink, createLinkSync } = __nccwpck_require__(3797)
const { createSymlink, createSymlinkSync } = __nccwpck_require__(2549)
module.exports = {
// file
2022-03-13 09:46:59 +00:00
createFile,
createFileSync,
ensureFile: createFile,
ensureFileSync: createFileSync,
// link
2022-03-13 09:46:59 +00:00
createLink,
createLinkSync,
ensureLink: createLink,
ensureLinkSync: createLinkSync,
// symlink
2022-03-13 09:46:59 +00:00
createSymlink,
createSymlinkSync,
ensureSymlink: createSymlink,
ensureSymlinkSync: createSymlinkSync
2021-01-08 20:47:49 +00:00
}
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 3797:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const path = __nccwpck_require__(1017)
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const mkdir = __nccwpck_require__(8605)
const pathExists = (__nccwpck_require__(3835).pathExists)
const { areIdentical } = __nccwpck_require__(3901)
2021-01-08 20:47:49 +00:00
function createLink (srcpath, dstpath, callback) {
function makeLink (srcpath, dstpath) {
fs.link(srcpath, dstpath, err => {
if (err) return callback(err)
callback(null)
})
}
fs.lstat(dstpath, (_, dstStat) => {
fs.lstat(srcpath, (err, srcStat) => {
if (err) {
err.message = err.message.replace('lstat', 'ensureLink')
return callback(err)
2021-01-08 20:47:49 +00:00
}
if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)
2021-01-08 20:47:49 +00:00
const dir = path.dirname(dstpath)
pathExists(dir, (err, dirExists) => {
if (err) return callback(err)
if (dirExists) return makeLink(srcpath, dstpath)
mkdir.mkdirs(dir, err => {
if (err) return callback(err)
makeLink(srcpath, dstpath)
})
})
})
})
}
2021-01-08 20:47:49 +00:00
function createLinkSync (srcpath, dstpath) {
let dstStat
try {
dstStat = fs.lstatSync(dstpath)
} catch {}
2021-01-08 20:47:49 +00:00
try {
const srcStat = fs.lstatSync(srcpath)
if (dstStat && areIdentical(srcStat, dstStat)) return
} catch (err) {
err.message = err.message.replace('lstat', 'ensureLink')
throw err
2021-01-08 20:47:49 +00:00
}
const dir = path.dirname(dstpath)
const dirExists = fs.existsSync(dir)
if (dirExists) return fs.linkSync(srcpath, dstpath)
mkdir.mkdirsSync(dir)
2021-01-08 20:47:49 +00:00
return fs.linkSync(srcpath, dstpath)
}
2021-01-08 20:47:49 +00:00
module.exports = {
createLink: u(createLink),
createLinkSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 3727:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const pathExists = (__nccwpck_require__(3835).pathExists)
/**
* Function that returns two types of paths, one relative to symlink, and one
* relative to the current working directory. Checks if path is absolute or
* relative. If the path is relative, this function checks if the path is
* relative to symlink or relative to current working directory. This is an
* initiative to find a smarter `srcpath` to supply when building symlinks.
* This allows you to determine which path to use out of one of three possible
* types of source paths. The first is an absolute path. This is detected by
* `path.isAbsolute()`. When an absolute path is provided, it is checked to
* see if it exists. If it does it's used, if not an error is returned
* (callback)/ thrown (sync). The other two options for `srcpath` are a
* relative url. By default Node's `fs.symlink` works by creating a symlink
* using `dstpath` and expects the `srcpath` to be relative to the newly
* created symlink. If you provide a `srcpath` that does not exist on the file
* system it results in a broken symlink. To minimize this, the function
* checks to see if the 'relative to symlink' source file exists, and if it
* does it will use it. If it does not, it checks if there's a file that
* exists that is relative to the current working directory, if does its used.
* This preserves the expectations of the original fs.symlink spec and adds
* the ability to pass in `relative to current working direcotry` paths.
*/
function symlinkPaths (srcpath, dstpath, callback) {
if (path.isAbsolute(srcpath)) {
return fs.lstat(srcpath, (err) => {
if (err) {
err.message = err.message.replace('lstat', 'ensureSymlink')
return callback(err)
}
return callback(null, {
toCwd: srcpath,
toDst: srcpath
})
})
} else {
const dstdir = path.dirname(dstpath)
const relativeToDst = path.join(dstdir, srcpath)
return pathExists(relativeToDst, (err, exists) => {
if (err) return callback(err)
if (exists) {
return callback(null, {
toCwd: relativeToDst,
toDst: srcpath
})
} else {
return fs.lstat(srcpath, (err) => {
if (err) {
err.message = err.message.replace('lstat', 'ensureSymlink')
return callback(err)
}
return callback(null, {
toCwd: srcpath,
toDst: path.relative(dstdir, srcpath)
})
})
2021-01-08 20:47:49 +00:00
}
})
}
}
2021-01-08 20:47:49 +00:00
function symlinkPathsSync (srcpath, dstpath) {
let exists
if (path.isAbsolute(srcpath)) {
exists = fs.existsSync(srcpath)
if (!exists) throw new Error('absolute srcpath does not exist')
return {
toCwd: srcpath,
toDst: srcpath
}
} else {
const dstdir = path.dirname(dstpath)
const relativeToDst = path.join(dstdir, srcpath)
exists = fs.existsSync(relativeToDst)
if (exists) {
return {
toCwd: relativeToDst,
toDst: srcpath
}
} else {
exists = fs.existsSync(srcpath)
if (!exists) throw new Error('relative srcpath does not exist')
return {
toCwd: srcpath,
toDst: path.relative(dstdir, srcpath)
}
2021-01-08 20:47:49 +00:00
}
}
}
2021-01-08 20:47:49 +00:00
module.exports = {
symlinkPaths,
symlinkPathsSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8254:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-01-08 20:47:49 +00:00
function symlinkType (srcpath, type, callback) {
callback = (typeof type === 'function') ? type : callback
type = (typeof type === 'function') ? false : type
if (type) return callback(null, type)
fs.lstat(srcpath, (err, stats) => {
if (err) return callback(null, 'file')
type = (stats && stats.isDirectory()) ? 'dir' : 'file'
callback(null, type)
})
}
2021-01-08 20:47:49 +00:00
function symlinkTypeSync (srcpath, type) {
let stats
2021-01-08 20:47:49 +00:00
if (type) return type
try {
stats = fs.lstatSync(srcpath)
} catch {
return 'file'
}
return (stats && stats.isDirectory()) ? 'dir' : 'file'
2021-01-08 20:47:49 +00:00
}
module.exports = {
symlinkType,
symlinkTypeSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2549:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const path = __nccwpck_require__(1017)
const fs = __nccwpck_require__(1176)
2021-12-19 20:39:50 +00:00
const _mkdirs = __nccwpck_require__(8605)
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync
2021-01-08 20:47:49 +00:00
const _symlinkPaths = __nccwpck_require__(3727)
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync
2021-01-08 20:47:49 +00:00
const _symlinkType = __nccwpck_require__(8254)
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const pathExists = (__nccwpck_require__(3835).pathExists)
2021-01-08 20:47:49 +00:00
const { areIdentical } = __nccwpck_require__(3901)
2021-01-08 20:47:49 +00:00
function createSymlink (srcpath, dstpath, type, callback) {
callback = (typeof type === 'function') ? type : callback
type = (typeof type === 'function') ? false : type
2021-01-08 20:47:49 +00:00
fs.lstat(dstpath, (err, stats) => {
if (!err && stats.isSymbolicLink()) {
Promise.all([
fs.stat(srcpath),
fs.stat(dstpath)
]).then(([srcStat, dstStat]) => {
if (areIdentical(srcStat, dstStat)) return callback(null)
_createSymlink(srcpath, dstpath, type, callback)
})
} else _createSymlink(srcpath, dstpath, type, callback)
})
2021-01-08 20:47:49 +00:00
}
function _createSymlink (srcpath, dstpath, type, callback) {
symlinkPaths(srcpath, dstpath, (err, relative) => {
if (err) return callback(err)
srcpath = relative.toDst
symlinkType(relative.toCwd, type, (err, type) => {
if (err) return callback(err)
const dir = path.dirname(dstpath)
pathExists(dir, (err, dirExists) => {
if (err) return callback(err)
if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
mkdirs(dir, err => {
if (err) return callback(err)
fs.symlink(srcpath, dstpath, type, callback)
})
})
})
})
}
2021-01-08 20:47:49 +00:00
function createSymlinkSync (srcpath, dstpath, type) {
let stats
try {
stats = fs.lstatSync(dstpath)
} catch {}
if (stats && stats.isSymbolicLink()) {
const srcStat = fs.statSync(srcpath)
const dstStat = fs.statSync(dstpath)
if (areIdentical(srcStat, dstStat)) return
2021-01-08 20:47:49 +00:00
}
const relative = symlinkPathsSync(srcpath, dstpath)
srcpath = relative.toDst
type = symlinkTypeSync(relative.toCwd, type)
const dir = path.dirname(dstpath)
const exists = fs.existsSync(dir)
if (exists) return fs.symlinkSync(srcpath, dstpath, type)
mkdirsSync(dir)
return fs.symlinkSync(srcpath, dstpath, type)
}
2021-01-08 20:47:49 +00:00
module.exports = {
createSymlink: u(createSymlink),
createSymlinkSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1176:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const fs = __nccwpck_require__(7758)
2021-01-08 20:47:49 +00:00
const api = [
'access',
'appendFile',
'chmod',
'chown',
'close',
'copyFile',
'fchmod',
'fchown',
'fdatasync',
'fstat',
'fsync',
'ftruncate',
'futimes',
'lchmod',
'lchown',
'link',
'lstat',
'mkdir',
'mkdtemp',
'open',
'opendir',
'readdir',
'readFile',
'readlink',
'realpath',
'rename',
'rm',
'rmdir',
'stat',
'symlink',
'truncate',
'unlink',
'utimes',
'writeFile'
].filter(key => {
// Some commands are not available on some systems. Ex:
// fs.opendir was added in Node.js v12.12.0
// fs.rm was added in Node.js v14.14.0
// fs.lchown is not available on at least some Linux
return typeof fs[key] === 'function'
})
2021-01-08 20:47:49 +00:00
// Export cloned fs:
Object.assign(exports, fs)
2021-01-08 20:47:49 +00:00
// Universalify async methods:
api.forEach(method => {
exports[method] = u(fs[method])
})
exports.realpath.native = u(fs.realpath.native)
2021-01-08 20:47:49 +00:00
// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
if (typeof callback === 'function') {
return fs.exists(filename, callback)
}
return new Promise(resolve => {
return fs.exists(filename, resolve)
})
}
2021-01-08 20:47:49 +00:00
// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args
2021-01-08 20:47:49 +00:00
exports.read = function (fd, buffer, offset, length, position, callback) {
if (typeof callback === 'function') {
return fs.read(fd, buffer, offset, length, position, callback)
}
return new Promise((resolve, reject) => {
fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
if (err) return reject(err)
resolve({ bytesRead, buffer })
})
})
}
2021-01-08 20:47:49 +00:00
// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// We need to handle both cases, so we use ...args
exports.write = function (fd, buffer, ...args) {
if (typeof args[args.length - 1] === 'function') {
return fs.write(fd, buffer, ...args)
}
2021-01-08 20:47:49 +00:00
return new Promise((resolve, reject) => {
fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
if (err) return reject(err)
resolve({ bytesWritten, buffer })
})
})
}
2021-01-08 20:47:49 +00:00
// fs.writev only available in Node v12.9.0+
if (typeof fs.writev === 'function') {
// Function signature is
// s.writev(fd, buffers[, position], callback)
// We need to handle the optional arg, so we use ...args
exports.writev = function (fd, buffers, ...args) {
if (typeof args[args.length - 1] === 'function') {
return fs.writev(fd, buffers, ...args)
}
2021-01-08 20:47:49 +00:00
return new Promise((resolve, reject) => {
fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {
if (err) return reject(err)
resolve({ bytesWritten, buffers })
})
})
}
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 5630:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
module.exports = {
// Export promiseified graceful-fs:
...__nccwpck_require__(1176),
// Export extra methods:
...__nccwpck_require__(1335),
...__nccwpck_require__(6970),
...__nccwpck_require__(55),
...__nccwpck_require__(213),
2021-12-19 20:39:50 +00:00
...__nccwpck_require__(8605),
...__nccwpck_require__(1497),
2022-03-13 09:46:59 +00:00
...__nccwpck_require__(1832),
...__nccwpck_require__(3835),
...__nccwpck_require__(7357)
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 213:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromPromise)
const jsonFile = __nccwpck_require__(8970)
2021-01-08 20:47:49 +00:00
jsonFile.outputJson = u(__nccwpck_require__(531))
jsonFile.outputJsonSync = __nccwpck_require__(9421)
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync
2021-01-08 20:47:49 +00:00
module.exports = jsonFile
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8970:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const jsonFile = __nccwpck_require__(6160)
2021-01-08 20:47:49 +00:00
module.exports = {
// jsonfile exports
readJson: jsonFile.readFile,
readJsonSync: jsonFile.readFileSync,
writeJson: jsonFile.writeFile,
writeJsonSync: jsonFile.writeFileSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 9421:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const { stringify } = __nccwpck_require__(5902)
2022-03-13 09:46:59 +00:00
const { outputFileSync } = __nccwpck_require__(1832)
2021-01-08 20:47:49 +00:00
function outputJsonSync (file, data, options) {
const str = stringify(data, options)
2021-01-08 20:47:49 +00:00
outputFileSync(file, str, options)
}
2021-01-08 20:47:49 +00:00
module.exports = outputJsonSync
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 531:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const { stringify } = __nccwpck_require__(5902)
2022-03-13 09:46:59 +00:00
const { outputFile } = __nccwpck_require__(1832)
2021-01-08 20:47:49 +00:00
async function outputJson (file, data, options = {}) {
const str = stringify(data, options)
2021-01-08 20:47:49 +00:00
await outputFile(file, str, options)
2021-01-08 20:47:49 +00:00
}
module.exports = outputJson
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
/***/ 8605:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromPromise)
const { makeDir: _makeDir, makeDirSync } = __nccwpck_require__(2751)
const makeDir = u(_makeDir)
2021-01-08 20:47:49 +00:00
module.exports = {
mkdirs: makeDir,
mkdirsSync: makeDirSync,
// alias
mkdirp: makeDir,
mkdirpSync: makeDirSync,
ensureDir: makeDir,
ensureDirSync: makeDirSync
2021-01-08 20:47:49 +00:00
}
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2751:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(1176)
const { checkPath } = __nccwpck_require__(9907)
2021-01-08 20:47:49 +00:00
const getMode = options => {
const defaults = { mode: 0o777 }
if (typeof options === 'number') return options
return ({ ...defaults, ...options }).mode
}
2021-01-08 20:47:49 +00:00
module.exports.makeDir = async (dir, options) => {
checkPath(dir)
2021-01-08 20:47:49 +00:00
return fs.mkdir(dir, {
mode: getMode(options),
recursive: true
})
2021-01-08 20:47:49 +00:00
}
module.exports.makeDirSync = (dir, options) => {
checkPath(dir)
2021-01-08 20:47:49 +00:00
return fs.mkdirSync(dir, {
mode: getMode(options),
recursive: true
})
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 9907:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
// Adapted from https://github.com/sindresorhus/make-dir
// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
2021-01-08 20:47:49 +00:00
// https://github.com/nodejs/node/issues/8987
// https://github.com/libuv/libuv/pull/1088
module.exports.checkPath = function checkPath (pth) {
if (process.platform === 'win32') {
const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))
2021-01-08 20:47:49 +00:00
if (pathHasInvalidWinCharacters) {
const error = new Error(`Path contains invalid characters: ${pth}`)
error.code = 'EINVAL'
throw error
}
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
/***/ 1497:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
module.exports = {
2022-03-13 09:46:59 +00:00
move: u(__nccwpck_require__(2231)),
moveSync: __nccwpck_require__(2047)
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
/***/ 2047:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
2022-03-13 09:46:59 +00:00
const copySync = (__nccwpck_require__(1335).copySync)
2021-12-19 20:39:50 +00:00
const removeSync = (__nccwpck_require__(7357).removeSync)
const mkdirpSync = (__nccwpck_require__(8605).mkdirpSync)
const stat = __nccwpck_require__(3901)
2021-01-08 20:47:49 +00:00
function moveSync (src, dest, opts) {
opts = opts || {}
const overwrite = opts.overwrite || opts.clobber || false
2021-01-08 20:47:49 +00:00
const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)
stat.checkParentPathsSync(src, srcStat, dest, 'move')
if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))
return doRename(src, dest, overwrite, isChangingCase)
}
2021-01-08 20:47:49 +00:00
function isParentRoot (dest) {
const parent = path.dirname(dest)
const parsedPath = path.parse(parent)
return parsedPath.root === parent
}
2021-01-08 20:47:49 +00:00
function doRename (src, dest, overwrite, isChangingCase) {
if (isChangingCase) return rename(src, dest, overwrite)
if (overwrite) {
removeSync(dest)
return rename(src, dest, overwrite)
2021-01-08 20:47:49 +00:00
}
if (fs.existsSync(dest)) throw new Error('dest already exists.')
return rename(src, dest, overwrite)
}
2021-01-08 20:47:49 +00:00
function rename (src, dest, overwrite) {
try {
fs.renameSync(src, dest)
} catch (err) {
if (err.code !== 'EXDEV') throw err
return moveAcrossDevice(src, dest, overwrite)
2021-01-08 20:47:49 +00:00
}
}
function moveAcrossDevice (src, dest, overwrite) {
const opts = {
overwrite,
errorOnExist: true
}
copySync(src, dest, opts)
return removeSync(src)
}
2021-01-08 20:47:49 +00:00
module.exports = moveSync
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2231:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const copy = (__nccwpck_require__(1335).copy)
const remove = (__nccwpck_require__(7357).remove)
const mkdirp = (__nccwpck_require__(8605).mkdirp)
const pathExists = (__nccwpck_require__(3835).pathExists)
const stat = __nccwpck_require__(3901)
2021-01-08 20:47:49 +00:00
function move (src, dest, opts, cb) {
if (typeof opts === 'function') {
cb = opts
opts = {}
2021-01-08 20:47:49 +00:00
}
const overwrite = opts.overwrite || opts.clobber || false
2021-01-08 20:47:49 +00:00
stat.checkPaths(src, dest, 'move', opts, (err, stats) => {
if (err) return cb(err)
const { srcStat, isChangingCase = false } = stats
stat.checkParentPaths(src, srcStat, dest, 'move', err => {
if (err) return cb(err)
if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)
mkdirp(path.dirname(dest), err => {
if (err) return cb(err)
return doRename(src, dest, overwrite, isChangingCase, cb)
})
})
})
}
2021-01-08 20:47:49 +00:00
function isParentRoot (dest) {
const parent = path.dirname(dest)
const parsedPath = path.parse(parent)
return parsedPath.root === parent
}
2021-01-08 20:47:49 +00:00
function doRename (src, dest, overwrite, isChangingCase, cb) {
if (isChangingCase) return rename(src, dest, overwrite, cb)
if (overwrite) {
return remove(dest, err => {
if (err) return cb(err)
return rename(src, dest, overwrite, cb)
})
2021-01-08 20:47:49 +00:00
}
pathExists(dest, (err, destExists) => {
if (err) return cb(err)
if (destExists) return cb(new Error('dest already exists.'))
return rename(src, dest, overwrite, cb)
})
}
2021-01-08 20:47:49 +00:00
function rename (src, dest, overwrite, cb) {
fs.rename(src, dest, err => {
if (!err) return cb()
if (err.code !== 'EXDEV') return cb(err)
return moveAcrossDevice(src, dest, overwrite, cb)
})
}
2021-01-08 20:47:49 +00:00
function moveAcrossDevice (src, dest, overwrite, cb) {
const opts = {
overwrite,
errorOnExist: true
2021-01-08 20:47:49 +00:00
}
copy(src, dest, opts, err => {
if (err) return cb(err)
return remove(src, cb)
})
2021-01-08 20:47:49 +00:00
}
module.exports = move
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-13 09:46:59 +00:00
/***/ 1832:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const mkdir = __nccwpck_require__(8605)
const pathExists = (__nccwpck_require__(3835).pathExists)
2021-01-08 20:47:49 +00:00
function outputFile (file, data, encoding, callback) {
if (typeof encoding === 'function') {
callback = encoding
encoding = 'utf8'
2021-01-08 20:47:49 +00:00
}
const dir = path.dirname(file)
pathExists(dir, (err, itDoes) => {
if (err) return callback(err)
if (itDoes) return fs.writeFile(file, data, encoding, callback)
2021-01-08 20:47:49 +00:00
mkdir.mkdirs(dir, err => {
if (err) return callback(err)
2021-01-08 20:47:49 +00:00
fs.writeFile(file, data, encoding, callback)
})
})
2021-01-08 20:47:49 +00:00
}
function outputFileSync (file, ...args) {
const dir = path.dirname(file)
if (fs.existsSync(dir)) {
return fs.writeFileSync(file, ...args)
2021-01-08 20:47:49 +00:00
}
mkdir.mkdirsSync(dir)
fs.writeFileSync(file, ...args)
}
2021-01-08 20:47:49 +00:00
module.exports = {
outputFile: u(outputFile),
outputFileSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 3835:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromPromise)
const fs = __nccwpck_require__(1176)
2021-01-08 20:47:49 +00:00
function pathExists (path) {
return fs.access(path).then(() => true).catch(() => false)
}
2021-01-08 20:47:49 +00:00
module.exports = {
pathExists: u(pathExists),
pathExistsSync: fs.existsSync
}
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 7357:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const u = (__nccwpck_require__(1463).fromCallback)
const rimraf = __nccwpck_require__(8761)
2021-01-08 20:47:49 +00:00
function remove (path, callback) {
// Node 14.14.0+
if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)
rimraf(path, callback)
}
2021-01-08 20:47:49 +00:00
function removeSync (path) {
// Node 14.14.0+
if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })
rimraf.sync(path)
}
2021-01-08 20:47:49 +00:00
module.exports = {
remove: u(remove),
removeSync
}
2021-01-08 20:47:49 +00:00
2021-04-16 13:23:55 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
/***/ 8761:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
const fs = __nccwpck_require__(7758)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const assert = __nccwpck_require__(9491)
2021-01-08 20:47:49 +00:00
const isWindows = (process.platform === 'win32')
2021-01-08 20:47:49 +00:00
function defaults (options) {
const methods = [
'unlink',
'chmod',
'stat',
'lstat',
'rmdir',
'readdir'
]
methods.forEach(m => {
options[m] = options[m] || fs[m]
m = m + 'Sync'
options[m] = options[m] || fs[m]
})
2021-01-08 20:47:49 +00:00
options.maxBusyTries = options.maxBusyTries || 3
2021-01-08 20:47:49 +00:00
}
function rimraf (p, options, cb) {
let busyTries = 0
2021-01-08 20:47:49 +00:00
if (typeof options === 'function') {
cb = options
options = {}
}
2021-01-08 20:47:49 +00:00
assert(p, 'rimraf: missing path')
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
assert(options, 'rimraf: invalid options argument provided')
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
2021-01-08 20:47:49 +00:00
defaults(options)
2021-01-08 20:47:49 +00:00
rimraf_(p, options, function CB (er) {
if (er) {
if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
busyTries < options.maxBusyTries) {
busyTries++
const time = busyTries * 100
// try again, with the same exact callback as this one.
return setTimeout(() => rimraf_(p, options, CB), time)
}
2021-01-08 20:47:49 +00:00
// already gone
if (er.code === 'ENOENT') er = null
}
2021-01-08 20:47:49 +00:00
cb(er)
})
}
2021-01-08 20:47:49 +00:00
// Two possible strategies.
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong. However, there
// are likely far more normal files in the world than directories. This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow. But until then, YAGNI.
function rimraf_ (p, options, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
2021-01-08 20:47:49 +00:00
// sunos lets the root user unlink directories, which is... weird.
// so we have to lstat here and make sure it's not a dir.
options.lstat(p, (er, st) => {
if (er && er.code === 'ENOENT') {
return cb(null)
2021-01-08 20:47:49 +00:00
}
// Windows can EPERM on stat. Life is suffering.
if (er && er.code === 'EPERM' && isWindows) {
return fixWinEPERM(p, options, er, cb)
2021-01-08 20:47:49 +00:00
}
if (st && st.isDirectory()) {
return rmdir(p, options, er, cb)
2021-01-08 20:47:49 +00:00
}
options.unlink(p, er => {
if (er) {
if (er.code === 'ENOENT') {
return cb(null)
}
if (er.code === 'EPERM') {
return (isWindows)
? fixWinEPERM(p, options, er, cb)
: rmdir(p, options, er, cb)
}
if (er.code === 'EISDIR') {
return rmdir(p, options, er, cb)
}
}
return cb(er)
})
})
}
2021-01-08 20:47:49 +00:00
function fixWinEPERM (p, options, er, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
2021-01-08 20:47:49 +00:00
options.chmod(p, 0o666, er2 => {
if (er2) {
cb(er2.code === 'ENOENT' ? null : er)
} else {
options.stat(p, (er3, stats) => {
if (er3) {
cb(er3.code === 'ENOENT' ? null : er)
} else if (stats.isDirectory()) {
rmdir(p, options, er, cb)
} else {
options.unlink(p, cb)
}
})
}
})
}
2021-01-08 20:47:49 +00:00
function fixWinEPERMSync (p, options, er) {
let stats
2021-01-08 20:47:49 +00:00
assert(p)
assert(options)
try {
options.chmodSync(p, 0o666)
} catch (er2) {
if (er2.code === 'ENOENT') {
return
} else {
throw er
}
}
2021-01-08 20:47:49 +00:00
try {
stats = options.statSync(p)
} catch (er3) {
if (er3.code === 'ENOENT') {
return
} else {
throw er
}
}
2021-01-08 20:47:49 +00:00
if (stats.isDirectory()) {
rmdirSync(p, options, er)
} else {
options.unlinkSync(p)
}
}
2021-01-08 20:47:49 +00:00
function rmdir (p, options, originalEr, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
2021-01-08 20:47:49 +00:00
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
// if we guessed wrong, and it's not a directory, then
// raise the original error.
options.rmdir(p, er => {
if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
rmkids(p, options, cb)
} else if (er && er.code === 'ENOTDIR') {
cb(originalEr)
} else {
cb(er)
}
})
}
2021-01-08 20:47:49 +00:00
function rmkids (p, options, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
2021-01-08 20:47:49 +00:00
options.readdir(p, (er, files) => {
if (er) return cb(er)
2021-01-08 20:47:49 +00:00
let n = files.length
let errState
2021-01-08 20:47:49 +00:00
if (n === 0) return options.rmdir(p, cb)
2021-01-08 20:47:49 +00:00
files.forEach(f => {
rimraf(path.join(p, f), options, er => {
if (errState) {
return
}
if (er) return cb(errState = er)
if (--n === 0) {
options.rmdir(p, cb)
}
})
})
})
}
2021-01-08 20:47:49 +00:00
// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
let st
2021-01-08 20:47:49 +00:00
options = options || {}
defaults(options)
2021-01-08 20:47:49 +00:00
assert(p, 'rimraf: missing path')
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
assert(options, 'rimraf: missing options')
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
2021-01-08 20:47:49 +00:00
try {
st = options.lstatSync(p)
} catch (er) {
if (er.code === 'ENOENT') {
return
}
2021-01-08 20:47:49 +00:00
// Windows can EPERM on stat. Life is suffering.
if (er.code === 'EPERM' && isWindows) {
fixWinEPERMSync(p, options, er)
}
}
2021-01-08 20:47:49 +00:00
try {
// sunos lets the root user unlink directories, which is... weird.
if (st && st.isDirectory()) {
rmdirSync(p, options, null)
} else {
options.unlinkSync(p)
}
} catch (er) {
if (er.code === 'ENOENT') {
return
} else if (er.code === 'EPERM') {
return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
} else if (er.code !== 'EISDIR') {
throw er
}
rmdirSync(p, options, er)
}
}
2021-01-08 20:47:49 +00:00
function rmdirSync (p, options, originalEr) {
assert(p)
assert(options)
2021-01-08 20:47:49 +00:00
try {
options.rmdirSync(p)
} catch (er) {
if (er.code === 'ENOTDIR') {
throw originalEr
} else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
rmkidsSync(p, options)
} else if (er.code !== 'ENOENT') {
throw er
}
}
}
2021-01-08 20:47:49 +00:00
function rmkidsSync (p, options) {
assert(p)
assert(options)
options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
2021-01-08 20:47:49 +00:00
if (isWindows) {
// We only end up here once we got ENOTEMPTY at least once, and
// at this point, we are guaranteed to have removed all the kids.
// So, we know that it won't be ENOENT or ENOTDIR or anything else.
// try really hard to delete stuff on windows, because it has a
// PROFOUNDLY annoying habit of not closing handles promptly when
// files are deleted, resulting in spurious ENOTEMPTY errors.
const startTime = Date.now()
do {
try {
const ret = options.rmdirSync(p, options)
return ret
} catch {}
} while (Date.now() - startTime < 500) // give up after 500ms
} else {
const ret = options.rmdirSync(p, options)
return ret
}
}
2021-01-08 20:47:49 +00:00
module.exports = rimraf
rimraf.sync = rimrafSync
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 3901:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
const fs = __nccwpck_require__(1176)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const util = __nccwpck_require__(3837)
2021-01-08 20:47:49 +00:00
function getStats (src, dest, opts) {
const statFunc = opts.dereference
? (file) => fs.stat(file, { bigint: true })
: (file) => fs.lstat(file, { bigint: true })
return Promise.all([
statFunc(src),
statFunc(dest).catch(err => {
if (err.code === 'ENOENT') return null
throw err
})
]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
}
2021-01-08 20:47:49 +00:00
function getStatsSync (src, dest, opts) {
let destStat
const statFunc = opts.dereference
? (file) => fs.statSync(file, { bigint: true })
: (file) => fs.lstatSync(file, { bigint: true })
const srcStat = statFunc(src)
try {
destStat = statFunc(dest)
} catch (err) {
if (err.code === 'ENOENT') return { srcStat, destStat: null }
throw err
}
return { srcStat, destStat }
}
2021-01-08 20:47:49 +00:00
function checkPaths (src, dest, funcName, opts, cb) {
util.callbackify(getStats)(src, dest, opts, (err, stats) => {
if (err) return cb(err)
const { srcStat, destStat } = stats
2021-01-08 20:47:49 +00:00
if (destStat) {
if (areIdentical(srcStat, destStat)) {
const srcBaseName = path.basename(src)
const destBaseName = path.basename(dest)
if (funcName === 'move' &&
srcBaseName !== destBaseName &&
srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
return cb(null, { srcStat, destStat, isChangingCase: true })
}
return cb(new Error('Source and destination must not be the same.'))
}
if (srcStat.isDirectory() && !destStat.isDirectory()) {
return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
}
if (!srcStat.isDirectory() && destStat.isDirectory()) {
return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))
}
}
2021-01-08 20:47:49 +00:00
if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
return cb(new Error(errMsg(src, dest, funcName)))
}
return cb(null, { srcStat, destStat })
})
}
2021-01-08 20:47:49 +00:00
function checkPathsSync (src, dest, funcName, opts) {
const { srcStat, destStat } = getStatsSync(src, dest, opts)
2021-01-08 20:47:49 +00:00
if (destStat) {
if (areIdentical(srcStat, destStat)) {
const srcBaseName = path.basename(src)
const destBaseName = path.basename(dest)
if (funcName === 'move' &&
srcBaseName !== destBaseName &&
srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
return { srcStat, destStat, isChangingCase: true }
}
throw new Error('Source and destination must not be the same.')
}
if (srcStat.isDirectory() && !destStat.isDirectory()) {
throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
}
if (!srcStat.isDirectory() && destStat.isDirectory()) {
throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
}
}
2021-01-08 20:47:49 +00:00
if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
throw new Error(errMsg(src, dest, funcName))
}
return { srcStat, destStat }
}
2021-01-08 20:47:49 +00:00
// recursively check if dest parent is a subdirectory of src.
// It works for all file types including symlinks since it
// checks the src and dest inodes. It starts from the deepest
// parent and stops once it reaches the src parent or the root path.
function checkParentPaths (src, srcStat, dest, funcName, cb) {
const srcParent = path.resolve(path.dirname(src))
const destParent = path.resolve(path.dirname(dest))
if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
fs.stat(destParent, { bigint: true }, (err, destStat) => {
if (err) {
if (err.code === 'ENOENT') return cb()
return cb(err)
}
if (areIdentical(srcStat, destStat)) {
return cb(new Error(errMsg(src, dest, funcName)))
}
return checkParentPaths(src, srcStat, destParent, funcName, cb)
})
}
2021-01-08 20:47:49 +00:00
function checkParentPathsSync (src, srcStat, dest, funcName) {
const srcParent = path.resolve(path.dirname(src))
const destParent = path.resolve(path.dirname(dest))
if (destParent === srcParent || destParent === path.parse(destParent).root) return
let destStat
try {
destStat = fs.statSync(destParent, { bigint: true })
} catch (err) {
if (err.code === 'ENOENT') return
throw err
}
if (areIdentical(srcStat, destStat)) {
throw new Error(errMsg(src, dest, funcName))
}
return checkParentPathsSync(src, srcStat, destParent, funcName)
}
2021-01-08 20:47:49 +00:00
function areIdentical (srcStat, destStat) {
return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev
}
2021-01-08 20:47:49 +00:00
// return true if dest is a subdir of src, otherwise false.
// It only checks the path strings.
function isSrcSubdir (src, dest) {
const srcArr = path.resolve(src).split(path.sep).filter(i => i)
const destArr = path.resolve(dest).split(path.sep).filter(i => i)
return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
}
2021-01-08 20:47:49 +00:00
function errMsg (src, dest, funcName) {
return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
}
2021-01-08 20:47:49 +00:00
module.exports = {
checkPaths,
checkPathsSync,
checkParentPaths,
checkParentPathsSync,
isSrcSubdir,
areIdentical
}
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 2548:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
const fs = __nccwpck_require__(7758)
2021-01-08 20:47:49 +00:00
function utimesMillis (path, atime, mtime, callback) {
// if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
fs.open(path, 'r+', (err, fd) => {
if (err) return callback(err)
fs.futimes(fd, atime, mtime, futimesErr => {
fs.close(fd, closeErr => {
if (callback) callback(futimesErr || closeErr)
})
})
})
2021-01-08 20:47:49 +00:00
}
function utimesMillisSync (path, atime, mtime) {
const fd = fs.openSync(path, 'r+')
fs.futimesSync(fd, atime, mtime)
return fs.closeSync(fd)
}
2021-01-08 20:47:49 +00:00
module.exports = {
utimesMillis,
utimesMillisSync
2021-01-08 20:47:49 +00:00
}
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 7356:
/***/ ((module) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
module.exports = clone
2021-01-08 20:47:49 +00:00
var getPrototypeOf = Object.getPrototypeOf || function (obj) {
return obj.__proto__
}
2021-01-08 20:47:49 +00:00
function clone (obj) {
if (obj === null || typeof obj !== 'object')
return obj
2021-01-08 20:47:49 +00:00
if (obj instanceof Object)
var copy = { __proto__: getPrototypeOf(obj) }
else
var copy = Object.create(null)
2021-01-08 20:47:49 +00:00
Object.getOwnPropertyNames(obj).forEach(function (key) {
Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
})
2021-01-08 20:47:49 +00:00
return copy
2021-01-08 20:47:49 +00:00
}
/***/ }),
/***/ 7758:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-12-19 20:39:50 +00:00
var fs = __nccwpck_require__(7147)
var polyfills = __nccwpck_require__(263)
var legacy = __nccwpck_require__(3086)
var clone = __nccwpck_require__(7356)
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
var util = __nccwpck_require__(3837)
2021-01-08 20:47:49 +00:00
/* istanbul ignore next - node 0.x polyfill */
var gracefulQueue
var previousSymbol
2021-01-08 20:47:49 +00:00
/* istanbul ignore else - node 0.x polyfill */
if (typeof Symbol === 'function' && typeof Symbol.for === 'function') {
gracefulQueue = Symbol.for('graceful-fs.queue')
// This is used in testing by future versions
previousSymbol = Symbol.for('graceful-fs.previous')
} else {
gracefulQueue = '___graceful-fs.queue'
previousSymbol = '___graceful-fs.previous'
}
2021-01-08 20:47:49 +00:00
function noop () {}
2021-01-08 20:47:49 +00:00
function publishQueue(context, queue) {
Object.defineProperty(context, gracefulQueue, {
get: function() {
return queue
}
})
}
2021-01-08 20:47:49 +00:00
var debug = noop
if (util.debuglog)
debug = util.debuglog('gfs4')
else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
debug = function() {
var m = util.format.apply(util, arguments)
m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
console.error(m)
2021-01-08 20:47:49 +00:00
}
// Once time initialization
if (!fs[gracefulQueue]) {
// This queue can be shared by multiple loaded instances
var queue = global[gracefulQueue] || []
publishQueue(fs, queue)
2021-01-08 20:47:49 +00:00
// Patch fs.close/closeSync to shared queue version, because we need
// to retry() whenever a close happens *anywhere* in the program.
// This is essential when multiple graceful-fs instances are
// in play at the same time.
fs.close = (function (fs$close) {
function close (fd, cb) {
return fs$close.call(fs, fd, function (err) {
// This function uses the graceful-fs shared queue
if (!err) {
retry()
}
2021-01-08 20:47:49 +00:00
if (typeof cb === 'function')
cb.apply(this, arguments)
})
2021-01-08 20:47:49 +00:00
}
Object.defineProperty(close, previousSymbol, {
value: fs$close
})
return close
})(fs.close)
2021-01-08 20:47:49 +00:00
fs.closeSync = (function (fs$closeSync) {
function closeSync (fd) {
// This function uses the graceful-fs shared queue
fs$closeSync.apply(fs, arguments)
retry()
}
Object.defineProperty(closeSync, previousSymbol, {
value: fs$closeSync
})
return closeSync
})(fs.closeSync)
if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
process.on('exit', function() {
debug(fs[gracefulQueue])
2021-12-19 20:39:50 +00:00
__nccwpck_require__(9491).equal(fs[gracefulQueue].length, 0)
})
2021-01-08 20:47:49 +00:00
}
}
if (!global[gracefulQueue]) {
publishQueue(global, fs[gracefulQueue]);
}
2021-01-08 20:47:49 +00:00
module.exports = patch(clone(fs))
if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {
module.exports = patch(fs)
fs.__patched = true;
}
2021-01-08 20:47:49 +00:00
function patch (fs) {
// Everything that references the open() function needs to be in here
polyfills(fs)
fs.gracefulify = patch
2021-01-08 20:47:49 +00:00
fs.createReadStream = createReadStream
fs.createWriteStream = createWriteStream
var fs$readFile = fs.readFile
fs.readFile = readFile
function readFile (path, options, cb) {
if (typeof options === 'function')
cb = options, options = null
2021-01-08 20:47:49 +00:00
return go$readFile(path, options, cb)
function go$readFile (path, options, cb) {
return fs$readFile(path, options, function (err) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$readFile, [path, options, cb]])
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
})
}
}
2021-01-08 20:47:49 +00:00
var fs$writeFile = fs.writeFile
fs.writeFile = writeFile
function writeFile (path, data, options, cb) {
if (typeof options === 'function')
cb = options, options = null
2021-01-08 20:47:49 +00:00
return go$writeFile(path, data, options, cb)
function go$writeFile (path, data, options, cb) {
return fs$writeFile(path, data, options, function (err) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$writeFile, [path, data, options, cb]])
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
})
}
}
2021-01-08 20:47:49 +00:00
var fs$appendFile = fs.appendFile
if (fs$appendFile)
fs.appendFile = appendFile
function appendFile (path, data, options, cb) {
if (typeof options === 'function')
cb = options, options = null
2021-01-08 20:47:49 +00:00
return go$appendFile(path, data, options, cb)
2021-01-08 20:47:49 +00:00
function go$appendFile (path, data, options, cb) {
return fs$appendFile(path, data, options, function (err) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$appendFile, [path, data, options, cb]])
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
})
}
}
2021-01-08 20:47:49 +00:00
var fs$copyFile = fs.copyFile
if (fs$copyFile)
fs.copyFile = copyFile
function copyFile (src, dest, flags, cb) {
if (typeof flags === 'function') {
cb = flags
flags = 0
}
return fs$copyFile(src, dest, flags, function (err) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([fs$copyFile, [src, dest, flags, cb]])
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
})
}
2021-01-08 20:47:49 +00:00
var fs$readdir = fs.readdir
fs.readdir = readdir
function readdir (path, options, cb) {
var args = [path]
if (typeof options !== 'function') {
args.push(options)
} else {
cb = options
}
args.push(go$readdir$cb)
2021-01-08 20:47:49 +00:00
return go$readdir(args)
2021-01-08 20:47:49 +00:00
function go$readdir$cb (err, files) {
if (files && files.sort)
files.sort()
2021-01-08 20:47:49 +00:00
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$readdir, [args]])
2021-01-08 20:47:49 +00:00
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
}
}
2021-01-08 20:47:49 +00:00
function go$readdir (args) {
return fs$readdir.apply(fs, args)
}
2021-01-08 20:47:49 +00:00
if (process.version.substr(0, 4) === 'v0.8') {
var legStreams = legacy(fs)
ReadStream = legStreams.ReadStream
WriteStream = legStreams.WriteStream
2021-01-08 20:47:49 +00:00
}
var fs$ReadStream = fs.ReadStream
if (fs$ReadStream) {
ReadStream.prototype = Object.create(fs$ReadStream.prototype)
ReadStream.prototype.open = ReadStream$open
}
2021-01-08 20:47:49 +00:00
var fs$WriteStream = fs.WriteStream
if (fs$WriteStream) {
WriteStream.prototype = Object.create(fs$WriteStream.prototype)
WriteStream.prototype.open = WriteStream$open
}
2021-01-08 20:47:49 +00:00
Object.defineProperty(fs, 'ReadStream', {
get: function () {
return ReadStream
},
set: function (val) {
ReadStream = val
},
enumerable: true,
configurable: true
})
Object.defineProperty(fs, 'WriteStream', {
get: function () {
return WriteStream
},
set: function (val) {
WriteStream = val
},
enumerable: true,
configurable: true
})
2021-01-08 20:47:49 +00:00
// legacy names
var FileReadStream = ReadStream
Object.defineProperty(fs, 'FileReadStream', {
get: function () {
return FileReadStream
},
set: function (val) {
FileReadStream = val
},
enumerable: true,
configurable: true
})
var FileWriteStream = WriteStream
Object.defineProperty(fs, 'FileWriteStream', {
get: function () {
return FileWriteStream
},
set: function (val) {
FileWriteStream = val
},
enumerable: true,
configurable: true
})
2021-01-08 20:47:49 +00:00
function ReadStream (path, options) {
if (this instanceof ReadStream)
return fs$ReadStream.apply(this, arguments), this
else
return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
2021-01-08 20:47:49 +00:00
}
function ReadStream$open () {
var that = this
open(that.path, that.flags, that.mode, function (err, fd) {
if (err) {
if (that.autoClose)
that.destroy()
2021-01-08 20:47:49 +00:00
that.emit('error', err)
} else {
that.fd = fd
that.emit('open', fd)
that.read()
}
})
2021-01-08 20:47:49 +00:00
}
function WriteStream (path, options) {
if (this instanceof WriteStream)
return fs$WriteStream.apply(this, arguments), this
else
return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
}
2021-01-08 20:47:49 +00:00
function WriteStream$open () {
var that = this
open(that.path, that.flags, that.mode, function (err, fd) {
if (err) {
that.destroy()
that.emit('error', err)
} else {
that.fd = fd
that.emit('open', fd)
}
})
}
2021-01-08 20:47:49 +00:00
function createReadStream (path, options) {
return new fs.ReadStream(path, options)
}
2021-01-08 20:47:49 +00:00
function createWriteStream (path, options) {
return new fs.WriteStream(path, options)
2021-01-08 20:47:49 +00:00
}
var fs$open = fs.open
fs.open = open
function open (path, flags, mode, cb) {
if (typeof mode === 'function')
cb = mode, mode = null
2021-01-08 20:47:49 +00:00
return go$open(path, flags, mode, cb)
2021-01-08 20:47:49 +00:00
function go$open (path, flags, mode, cb) {
return fs$open(path, flags, mode, function (err, fd) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$open, [path, flags, mode, cb]])
else {
if (typeof cb === 'function')
cb.apply(this, arguments)
retry()
}
})
}
2021-01-08 20:47:49 +00:00
}
return fs
2021-01-08 20:47:49 +00:00
}
function enqueue (elem) {
debug('ENQUEUE', elem[0].name, elem[1])
fs[gracefulQueue].push(elem)
2021-01-08 20:47:49 +00:00
}
function retry () {
var elem = fs[gracefulQueue].shift()
if (elem) {
debug('RETRY', elem[0].name, elem[1])
elem[0].apply(null, elem[1])
}
}
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 3086:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-12-19 20:39:50 +00:00
var Stream = (__nccwpck_require__(2781).Stream)
2021-01-08 20:47:49 +00:00
module.exports = legacy
2021-01-08 20:47:49 +00:00
function legacy (fs) {
return {
ReadStream: ReadStream,
WriteStream: WriteStream
}
2021-01-08 20:47:49 +00:00
function ReadStream (path, options) {
if (!(this instanceof ReadStream)) return new ReadStream(path, options);
2021-01-08 20:47:49 +00:00
Stream.call(this);
2021-01-08 20:47:49 +00:00
var self = this;
2021-01-08 20:47:49 +00:00
this.path = path;
this.fd = null;
this.readable = true;
this.paused = false;
2021-01-08 20:47:49 +00:00
this.flags = 'r';
this.mode = 438; /*=0666*/
this.bufferSize = 64 * 1024;
2021-01-08 20:47:49 +00:00
options = options || {};
2021-01-08 20:47:49 +00:00
// Mixin options into this
var keys = Object.keys(options);
for (var index = 0, length = keys.length; index < length; index++) {
var key = keys[index];
this[key] = options[key];
}
2021-01-08 20:47:49 +00:00
if (this.encoding) this.setEncoding(this.encoding);
2021-01-08 20:47:49 +00:00
if (this.start !== undefined) {
if ('number' !== typeof this.start) {
throw TypeError('start must be a Number');
}
if (this.end === undefined) {
this.end = Infinity;
} else if ('number' !== typeof this.end) {
throw TypeError('end must be a Number');
}
2021-01-08 20:47:49 +00:00
if (this.start > this.end) {
throw new Error('start must be <= end');
}
2021-01-08 20:47:49 +00:00
this.pos = this.start;
}
2021-01-08 20:47:49 +00:00
if (this.fd !== null) {
process.nextTick(function() {
self._read();
});
return;
}
2021-01-08 20:47:49 +00:00
fs.open(this.path, this.flags, this.mode, function (err, fd) {
if (err) {
self.emit('error', err);
self.readable = false;
return;
}
2021-01-08 20:47:49 +00:00
self.fd = fd;
self.emit('open', fd);
self._read();
})
2021-01-08 20:47:49 +00:00
}
function WriteStream (path, options) {
if (!(this instanceof WriteStream)) return new WriteStream(path, options);
2021-01-08 20:47:49 +00:00
Stream.call(this);
2021-01-08 20:47:49 +00:00
this.path = path;
this.fd = null;
this.writable = true;
2021-01-08 20:47:49 +00:00
this.flags = 'w';
this.encoding = 'binary';
this.mode = 438; /*=0666*/
this.bytesWritten = 0;
2021-01-08 20:47:49 +00:00
options = options || {};
2021-01-08 20:47:49 +00:00
// Mixin options into this
var keys = Object.keys(options);
for (var index = 0, length = keys.length; index < length; index++) {
var key = keys[index];
this[key] = options[key];
}
2021-01-08 20:47:49 +00:00
if (this.start !== undefined) {
if ('number' !== typeof this.start) {
throw TypeError('start must be a Number');
}
if (this.start < 0) {
throw new Error('start must be >= zero');
}
2021-01-08 20:47:49 +00:00
this.pos = this.start;
}
2021-01-08 20:47:49 +00:00
this.busy = false;
this._queue = [];
2021-01-08 20:47:49 +00:00
if (this.fd === null) {
this._open = fs.open;
this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
this.flush();
2021-01-08 20:47:49 +00:00
}
}
}
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 263:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
var constants = __nccwpck_require__(2057)
var origCwd = process.cwd
var cwd = null
var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
process.cwd = function() {
if (!cwd)
cwd = origCwd.call(process)
return cwd
2021-01-08 20:47:49 +00:00
}
try {
process.cwd()
} catch (er) {}
2021-01-08 20:47:49 +00:00
// This check is needed until node.js 12 is required
if (typeof process.chdir === 'function') {
var chdir = process.chdir
process.chdir = function (d) {
cwd = null
chdir.call(process, d)
}
if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
}
2021-01-08 20:47:49 +00:00
module.exports = patch
2021-01-08 20:47:49 +00:00
function patch (fs) {
// (re-)implement some things that are known busted or missing.
2021-01-08 20:47:49 +00:00
// lchmod, broken prior to 0.6.2
// back-port the fix here.
if (constants.hasOwnProperty('O_SYMLINK') &&
process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
patchLchmod(fs)
}
2021-01-08 20:47:49 +00:00
// lutimes implementation, or no-op
if (!fs.lutimes) {
patchLutimes(fs)
}
2021-01-08 20:47:49 +00:00
// https://github.com/isaacs/node-graceful-fs/issues/4
// Chown should not fail on einval or eperm if non-root.
// It should not fail on enosys ever, as this just indicates
// that a fs doesn't support the intended operation.
2021-01-08 20:47:49 +00:00
fs.chown = chownFix(fs.chown)
fs.fchown = chownFix(fs.fchown)
fs.lchown = chownFix(fs.lchown)
2021-01-08 20:47:49 +00:00
fs.chmod = chmodFix(fs.chmod)
fs.fchmod = chmodFix(fs.fchmod)
fs.lchmod = chmodFix(fs.lchmod)
2021-01-08 20:47:49 +00:00
fs.chownSync = chownFixSync(fs.chownSync)
fs.fchownSync = chownFixSync(fs.fchownSync)
fs.lchownSync = chownFixSync(fs.lchownSync)
2021-01-08 20:47:49 +00:00
fs.chmodSync = chmodFixSync(fs.chmodSync)
fs.fchmodSync = chmodFixSync(fs.fchmodSync)
fs.lchmodSync = chmodFixSync(fs.lchmodSync)
2021-01-08 20:47:49 +00:00
fs.stat = statFix(fs.stat)
fs.fstat = statFix(fs.fstat)
fs.lstat = statFix(fs.lstat)
2021-01-08 20:47:49 +00:00
fs.statSync = statFixSync(fs.statSync)
fs.fstatSync = statFixSync(fs.fstatSync)
fs.lstatSync = statFixSync(fs.lstatSync)
2021-01-08 20:47:49 +00:00
// if lchmod/lchown do not exist, then make them no-ops
if (!fs.lchmod) {
fs.lchmod = function (path, mode, cb) {
if (cb) process.nextTick(cb)
}
fs.lchmodSync = function () {}
}
if (!fs.lchown) {
fs.lchown = function (path, uid, gid, cb) {
if (cb) process.nextTick(cb)
}
fs.lchownSync = function () {}
}
2021-01-08 20:47:49 +00:00
// on Windows, A/V software can lock the directory, causing this
// to fail with an EACCES or EPERM if the directory contains newly
// created files. Try again on failure, for up to 60 seconds.
2021-01-08 20:47:49 +00:00
// Set the timeout this long because some Windows Anti-Virus, such as Parity
// bit9, may lock files for up to a minute, causing npm package install
// failures. Also, take care to yield the scheduler. Windows scheduling gives
// CPU to a busy looping process, which can cause the program causing the lock
// contention to be starved of CPU by node, so the contention doesn't resolve.
if (platform === "win32") {
fs.rename = (function (fs$rename) { return function (from, to, cb) {
var start = Date.now()
var backoff = 0;
fs$rename(from, to, function CB (er) {
if (er
&& (er.code === "EACCES" || er.code === "EPERM")
&& Date.now() - start < 60000) {
setTimeout(function() {
fs.stat(to, function (stater, st) {
if (stater && stater.code === "ENOENT")
fs$rename(from, to, CB);
else
cb(er)
})
}, backoff)
if (backoff < 100)
backoff += 10;
return;
}
if (cb) cb(er)
})
}})(fs.rename)
2021-01-08 20:47:49 +00:00
}
// if read() returns EAGAIN, then just try it again.
fs.read = (function (fs$read) {
function read (fd, buffer, offset, length, position, callback_) {
var callback
if (callback_ && typeof callback_ === 'function') {
var eagCounter = 0
callback = function (er, _, __) {
if (er && er.code === 'EAGAIN' && eagCounter < 10) {
eagCounter ++
return fs$read.call(fs, fd, buffer, offset, length, position, callback)
}
callback_.apply(this, arguments)
}
}
return fs$read.call(fs, fd, buffer, offset, length, position, callback)
}
2021-01-08 20:47:49 +00:00
// This ensures `util.promisify` works as it does for native `fs.read`.
if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
return read
})(fs.read)
2021-01-08 20:47:49 +00:00
fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
var eagCounter = 0
while (true) {
try {
return fs$readSync.call(fs, fd, buffer, offset, length, position)
} catch (er) {
if (er.code === 'EAGAIN' && eagCounter < 10) {
eagCounter ++
continue
}
throw er
2021-01-08 20:47:49 +00:00
}
}
}})(fs.readSync)
2021-01-08 20:47:49 +00:00
function patchLchmod (fs) {
fs.lchmod = function (path, mode, callback) {
fs.open( path
, constants.O_WRONLY | constants.O_SYMLINK
, mode
, function (err, fd) {
if (err) {
if (callback) callback(err)
return
}
// prefer to return the chmod error, if one occurs,
// but still try to close, and report closing errors if they occur.
fs.fchmod(fd, mode, function (err) {
fs.close(fd, function(err2) {
if (callback) callback(err || err2)
})
})
})
}
2021-01-08 20:47:49 +00:00
fs.lchmodSync = function (path, mode) {
var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
2021-01-08 20:47:49 +00:00
// prefer to return the chmod error, if one occurs,
// but still try to close, and report closing errors if they occur.
var threw = true
var ret
try {
ret = fs.fchmodSync(fd, mode)
threw = false
} finally {
if (threw) {
try {
fs.closeSync(fd)
} catch (er) {}
} else {
fs.closeSync(fd)
}
2021-01-08 20:47:49 +00:00
}
return ret
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
function patchLutimes (fs) {
if (constants.hasOwnProperty("O_SYMLINK")) {
fs.lutimes = function (path, at, mt, cb) {
fs.open(path, constants.O_SYMLINK, function (er, fd) {
if (er) {
if (cb) cb(er)
return
}
fs.futimes(fd, at, mt, function (er) {
fs.close(fd, function (er2) {
if (cb) cb(er || er2)
})
})
})
}
2021-01-08 20:47:49 +00:00
fs.lutimesSync = function (path, at, mt) {
var fd = fs.openSync(path, constants.O_SYMLINK)
var ret
var threw = true
try {
ret = fs.futimesSync(fd, at, mt)
threw = false
} finally {
if (threw) {
try {
fs.closeSync(fd)
} catch (er) {}
} else {
fs.closeSync(fd)
}
}
return ret
}
2021-01-08 20:47:49 +00:00
} else {
fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
fs.lutimesSync = function () {}
}
}
function chmodFix (orig) {
if (!orig) return orig
return function (target, mode, cb) {
return orig.call(fs, target, mode, function (er) {
if (chownErOk(er)) er = null
if (cb) cb.apply(this, arguments)
})
}
}
function chmodFixSync (orig) {
if (!orig) return orig
return function (target, mode) {
try {
return orig.call(fs, target, mode)
} catch (er) {
if (!chownErOk(er)) throw er
2021-01-08 20:47:49 +00:00
}
}
}
function chownFix (orig) {
if (!orig) return orig
return function (target, uid, gid, cb) {
return orig.call(fs, target, uid, gid, function (er) {
if (chownErOk(er)) er = null
if (cb) cb.apply(this, arguments)
})
2021-01-08 20:47:49 +00:00
}
}
function chownFixSync (orig) {
if (!orig) return orig
return function (target, uid, gid) {
try {
return orig.call(fs, target, uid, gid)
} catch (er) {
if (!chownErOk(er)) throw er
}
}
2021-01-08 20:47:49 +00:00
}
function statFix (orig) {
if (!orig) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function (target, options, cb) {
if (typeof options === 'function') {
cb = options
options = null
}
function callback (er, stats) {
if (stats) {
if (stats.uid < 0) stats.uid += 0x100000000
if (stats.gid < 0) stats.gid += 0x100000000
}
if (cb) cb.apply(this, arguments)
}
return options ? orig.call(fs, target, options, callback)
: orig.call(fs, target, callback)
}
2021-01-08 20:47:49 +00:00
}
function statFixSync (orig) {
if (!orig) return orig
// Older versions of Node erroneously returned signed integers for
// uid + gid.
return function (target, options) {
var stats = options ? orig.call(fs, target, options)
: orig.call(fs, target)
if (stats.uid < 0) stats.uid += 0x100000000
if (stats.gid < 0) stats.gid += 0x100000000
return stats;
}
2021-01-08 20:47:49 +00:00
}
// ENOSYS means that the fs doesn't support the op. Just ignore
// that, because it doesn't matter.
//
// if there's no getuid, or if getuid() is something other
// than 0, and the error is EINVAL or EPERM, then just ignore
// it.
//
// This specific case is a silent failure in cp, install, tar,
// and most other unix tools that manage permissions.
//
// When running as root, or if other types of errors are
// encountered, then it's strict.
function chownErOk (er) {
if (!er)
return true
2021-01-08 20:47:49 +00:00
if (er.code === "ENOSYS")
return true
2021-01-08 20:47:49 +00:00
var nonroot = !process.getuid || process.getuid() !== 0
if (nonroot) {
if (er.code === "EINVAL" || er.code === "EPERM")
return true
}
return false
2021-01-08 20:47:49 +00:00
}
}
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 3287:
/***/ ((__unused_webpack_module, exports) => {
2021-01-08 20:47:49 +00:00
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-01-08 20:47:49 +00:00
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
2021-01-08 20:47:49 +00:00
function isObject(o) {
return Object.prototype.toString.call(o) === '[object Object]';
}
2021-01-08 20:47:49 +00:00
function isPlainObject(o) {
var ctor,prot;
2021-01-08 20:47:49 +00:00
if (isObject(o) === false) return false;
2021-01-08 20:47:49 +00:00
// If has modified constructor
ctor = o.constructor;
if (ctor === undefined) return true;
2021-01-08 20:47:49 +00:00
// If has modified prototype
prot = ctor.prototype;
if (isObject(prot) === false) return false;
2021-01-08 20:47:49 +00:00
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false;
}
2021-01-08 20:47:49 +00:00
// Most likely a plain Object
return true;
2021-01-08 20:47:49 +00:00
}
exports.isPlainObject = isPlainObject;
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 1917:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var loader = __nccwpck_require__(1161);
var dumper = __nccwpck_require__(8866);
2021-01-08 20:47:49 +00:00
function renamed(from, to) {
return function () {
throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +
'Use yaml.' + to + ' instead, which is now safe by default.');
};
2021-01-08 20:47:49 +00:00
}
module.exports.Type = __nccwpck_require__(6073);
module.exports.Schema = __nccwpck_require__(1082);
module.exports.FAILSAFE_SCHEMA = __nccwpck_require__(8562);
module.exports.JSON_SCHEMA = __nccwpck_require__(1035);
module.exports.CORE_SCHEMA = __nccwpck_require__(2011);
module.exports.DEFAULT_SCHEMA = __nccwpck_require__(8759);
module.exports.load = loader.load;
module.exports.loadAll = loader.loadAll;
module.exports.dump = dumper.dump;
module.exports.YAMLException = __nccwpck_require__(8179);
// Re-export all types in case user wants to create custom schema
module.exports.types = {
binary: __nccwpck_require__(7900),
float: __nccwpck_require__(2705),
map: __nccwpck_require__(6150),
null: __nccwpck_require__(721),
pairs: __nccwpck_require__(6860),
set: __nccwpck_require__(9548),
timestamp: __nccwpck_require__(9212),
bool: __nccwpck_require__(4993),
int: __nccwpck_require__(1615),
merge: __nccwpck_require__(6104),
omap: __nccwpck_require__(9046),
seq: __nccwpck_require__(7283),
str: __nccwpck_require__(3619)
};
// Removed functions from JS-YAML 3.0.x
module.exports.safeLoad = renamed('safeLoad', 'load');
module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll');
module.exports.safeDump = renamed('safeDump', 'dump');
/***/ }),
/***/ 6829:
/***/ ((module) => {
"use strict";
2021-01-08 20:47:49 +00:00
function isNothing(subject) {
return (typeof subject === 'undefined') || (subject === null);
}
2021-01-08 20:47:49 +00:00
function isObject(subject) {
return (typeof subject === 'object') && (subject !== null);
}
2021-01-08 20:47:49 +00:00
function toArray(sequence) {
if (Array.isArray(sequence)) return sequence;
else if (isNothing(sequence)) return [];
2021-01-08 20:47:49 +00:00
return [ sequence ];
}
2021-01-08 20:47:49 +00:00
function extend(target, source) {
var index, length, key, sourceKeys;
2021-01-08 20:47:49 +00:00
if (source) {
sourceKeys = Object.keys(source);
2021-01-08 20:47:49 +00:00
for (index = 0, length = sourceKeys.length; index < length; index += 1) {
key = sourceKeys[index];
target[key] = source[key];
}
}
2021-01-08 20:47:49 +00:00
return target;
}
2021-01-08 20:47:49 +00:00
function repeat(string, count) {
var result = '', cycle;
2021-01-08 20:47:49 +00:00
for (cycle = 0; cycle < count; cycle += 1) {
result += string;
2021-01-08 20:47:49 +00:00
}
return result;
2021-01-08 20:47:49 +00:00
}
function isNegativeZero(number) {
return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);
2021-01-08 20:47:49 +00:00
}
module.exports.isNothing = isNothing;
module.exports.isObject = isObject;
module.exports.toArray = toArray;
module.exports.repeat = repeat;
module.exports.isNegativeZero = isNegativeZero;
module.exports.extend = extend;
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 8866:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
/*eslint-disable no-use-before-define*/
2021-01-08 20:47:49 +00:00
var common = __nccwpck_require__(6829);
var YAMLException = __nccwpck_require__(8179);
var DEFAULT_SCHEMA = __nccwpck_require__(8759);
2021-01-08 20:47:49 +00:00
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
2021-01-08 20:47:49 +00:00
var CHAR_BOM = 0xFEFF;
var CHAR_TAB = 0x09; /* Tab */
var CHAR_LINE_FEED = 0x0A; /* LF */
var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */
var CHAR_SPACE = 0x20; /* Space */
var CHAR_EXCLAMATION = 0x21; /* ! */
var CHAR_DOUBLE_QUOTE = 0x22; /* " */
var CHAR_SHARP = 0x23; /* # */
var CHAR_PERCENT = 0x25; /* % */
var CHAR_AMPERSAND = 0x26; /* & */
var CHAR_SINGLE_QUOTE = 0x27; /* ' */
var CHAR_ASTERISK = 0x2A; /* * */
var CHAR_COMMA = 0x2C; /* , */
var CHAR_MINUS = 0x2D; /* - */
var CHAR_COLON = 0x3A; /* : */
var CHAR_EQUALS = 0x3D; /* = */
var CHAR_GREATER_THAN = 0x3E; /* > */
var CHAR_QUESTION = 0x3F; /* ? */
var CHAR_COMMERCIAL_AT = 0x40; /* @ */
var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */
var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */
var CHAR_GRAVE_ACCENT = 0x60; /* ` */
var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */
var CHAR_VERTICAL_LINE = 0x7C; /* | */
var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */
2021-01-08 20:47:49 +00:00
var ESCAPE_SEQUENCES = {};
2021-01-08 20:47:49 +00:00
ESCAPE_SEQUENCES[0x00] = '\\0';
ESCAPE_SEQUENCES[0x07] = '\\a';
ESCAPE_SEQUENCES[0x08] = '\\b';
ESCAPE_SEQUENCES[0x09] = '\\t';
ESCAPE_SEQUENCES[0x0A] = '\\n';
ESCAPE_SEQUENCES[0x0B] = '\\v';
ESCAPE_SEQUENCES[0x0C] = '\\f';
ESCAPE_SEQUENCES[0x0D] = '\\r';
ESCAPE_SEQUENCES[0x1B] = '\\e';
ESCAPE_SEQUENCES[0x22] = '\\"';
ESCAPE_SEQUENCES[0x5C] = '\\\\';
ESCAPE_SEQUENCES[0x85] = '\\N';
ESCAPE_SEQUENCES[0xA0] = '\\_';
ESCAPE_SEQUENCES[0x2028] = '\\L';
ESCAPE_SEQUENCES[0x2029] = '\\P';
2021-01-08 20:47:49 +00:00
var DEPRECATED_BOOLEANS_SYNTAX = [
'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',
'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'
];
2021-01-08 20:47:49 +00:00
var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;
2021-01-08 20:47:49 +00:00
function compileStyleMap(schema, map) {
var result, keys, index, length, tag, style, type;
2021-01-08 20:47:49 +00:00
if (map === null) return {};
2021-01-08 20:47:49 +00:00
result = {};
keys = Object.keys(map);
2021-01-08 20:47:49 +00:00
for (index = 0, length = keys.length; index < length; index += 1) {
tag = keys[index];
style = String(map[tag]);
2021-01-08 20:47:49 +00:00
if (tag.slice(0, 2) === '!!') {
tag = 'tag:yaml.org,2002:' + tag.slice(2);
}
type = schema.compiledTypeMap['fallback'][tag];
2021-01-08 20:47:49 +00:00
if (type && _hasOwnProperty.call(type.styleAliases, style)) {
style = type.styleAliases[style];
}
2021-01-08 20:47:49 +00:00
result[tag] = style;
2021-01-08 20:47:49 +00:00
}
return result;
}
function encodeHex(character) {
var string, handle, length;
2021-01-08 20:47:49 +00:00
string = character.toString(16).toUpperCase();
2021-01-08 20:47:49 +00:00
if (character <= 0xFF) {
handle = 'x';
length = 2;
} else if (character <= 0xFFFF) {
handle = 'u';
length = 4;
} else if (character <= 0xFFFFFFFF) {
handle = 'U';
length = 8;
} else {
throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');
}
2021-01-08 20:47:49 +00:00
return '\\' + handle + common.repeat('0', length - string.length) + string;
}
2021-01-08 20:47:49 +00:00
var QUOTING_TYPE_SINGLE = 1,
QUOTING_TYPE_DOUBLE = 2;
2021-01-08 20:47:49 +00:00
function State(options) {
this.schema = options['schema'] || DEFAULT_SCHEMA;
this.indent = Math.max(1, (options['indent'] || 2));
this.noArrayIndent = options['noArrayIndent'] || false;
this.skipInvalid = options['skipInvalid'] || false;
this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);
this.styleMap = compileStyleMap(this.schema, options['styles'] || null);
this.sortKeys = options['sortKeys'] || false;
this.lineWidth = options['lineWidth'] || 80;
this.noRefs = options['noRefs'] || false;
this.noCompatMode = options['noCompatMode'] || false;
this.condenseFlow = options['condenseFlow'] || false;
this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;
this.forceQuotes = options['forceQuotes'] || false;
this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;
2021-01-08 20:47:49 +00:00
this.implicitTypes = this.schema.compiledImplicit;
this.explicitTypes = this.schema.compiledExplicit;
2021-01-08 20:47:49 +00:00
this.tag = null;
this.result = '';
2021-01-08 20:47:49 +00:00
this.duplicates = [];
this.usedDuplicates = null;
}
2021-01-08 20:47:49 +00:00
// Indents every line in a string. Empty lines (\n only) are not indented.
function indentString(string, spaces) {
var ind = common.repeat(' ', spaces),
position = 0,
next = -1,
result = '',
line,
length = string.length;
2021-01-08 20:47:49 +00:00
while (position < length) {
next = string.indexOf('\n', position);
if (next === -1) {
line = string.slice(position);
position = length;
} else {
line = string.slice(position, next + 1);
position = next + 1;
}
if (line.length && line !== '\n') result += ind;
2021-01-08 20:47:49 +00:00
result += line;
}
2021-01-08 20:47:49 +00:00
return result;
}
2021-01-08 20:47:49 +00:00
function generateNextLine(state, level) {
return '\n' + common.repeat(' ', state.indent * level);
}
2021-01-08 20:47:49 +00:00
function testImplicitResolving(state, str) {
var index, length, type;
2021-01-08 20:47:49 +00:00
for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {
type = state.implicitTypes[index];
2021-01-08 20:47:49 +00:00
if (type.resolve(str)) {
return true;
2021-01-08 20:47:49 +00:00
}
}
return false;
2021-01-08 20:47:49 +00:00
}
// [33] s-white ::= s-space | s-tab
function isWhitespace(c) {
return c === CHAR_SPACE || c === CHAR_TAB;
2021-01-08 20:47:49 +00:00
}
// Returns true if the character can be printed without escaping.
// From YAML 1.2: "any allowed characters known to be non-printable
// should also be escaped. [However,] This isnt mandatory"
// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029.
function isPrintable(c) {
return (0x00020 <= c && c <= 0x00007E)
|| ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)
|| ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)
|| (0x10000 <= c && c <= 0x10FFFF);
}
2021-01-08 20:47:49 +00:00
// [34] ns-char ::= nb-char - s-white
// [27] nb-char ::= c-printable - b-char - c-byte-order-mark
// [26] b-char ::= b-line-feed | b-carriage-return
// Including s-white (for some reason, examples doesn't match specs in this aspect)
// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark
function isNsCharOrWhitespace(c) {
return isPrintable(c)
&& c !== CHAR_BOM
// - b-char
&& c !== CHAR_CARRIAGE_RETURN
&& c !== CHAR_LINE_FEED;
}
2021-01-08 20:47:49 +00:00
// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out
// c = flow-in ⇒ ns-plain-safe-in
// c = block-key ⇒ ns-plain-safe-out
// c = flow-key ⇒ ns-plain-safe-in
// [128] ns-plain-safe-out ::= ns-char
// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator
// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )
// | ( /* An ns-char preceding */ “#” )
// | ( “:” /* Followed by an ns-plain-safe(c) */ )
function isPlainSafe(c, prev, inblock) {
var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);
var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);
return (
// ns-plain-safe
inblock ? // c = flow-in
cIsNsCharOrWhitespace
: cIsNsCharOrWhitespace
// - c-flow-indicator
&& c !== CHAR_COMMA
&& c !== CHAR_LEFT_SQUARE_BRACKET
&& c !== CHAR_RIGHT_SQUARE_BRACKET
&& c !== CHAR_LEFT_CURLY_BRACKET
&& c !== CHAR_RIGHT_CURLY_BRACKET
)
// ns-plain-char
&& c !== CHAR_SHARP // false on '#'
&& !(prev === CHAR_COLON && !cIsNsChar) // false on ': '
|| (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'
|| (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'
}
2021-01-08 20:47:49 +00:00
// Simplified test for values allowed as the first character in plain style.
function isPlainSafeFirst(c) {
// Uses a subset of ns-char - c-indicator
// where ns-char = nb-char - s-white.
// No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part
return isPrintable(c) && c !== CHAR_BOM
&& !isWhitespace(c) // - s-white
// - (c-indicator ::=
// “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”
&& c !== CHAR_MINUS
&& c !== CHAR_QUESTION
&& c !== CHAR_COLON
&& c !== CHAR_COMMA
&& c !== CHAR_LEFT_SQUARE_BRACKET
&& c !== CHAR_RIGHT_SQUARE_BRACKET
&& c !== CHAR_LEFT_CURLY_BRACKET
&& c !== CHAR_RIGHT_CURLY_BRACKET
// | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"”
&& c !== CHAR_SHARP
&& c !== CHAR_AMPERSAND
&& c !== CHAR_ASTERISK
&& c !== CHAR_EXCLAMATION
&& c !== CHAR_VERTICAL_LINE
&& c !== CHAR_EQUALS
&& c !== CHAR_GREATER_THAN
&& c !== CHAR_SINGLE_QUOTE
&& c !== CHAR_DOUBLE_QUOTE
// | “%” | “@” | “`”)
&& c !== CHAR_PERCENT
&& c !== CHAR_COMMERCIAL_AT
&& c !== CHAR_GRAVE_ACCENT;
}
2021-01-08 20:47:49 +00:00
// Simplified test for values allowed as the last character in plain style.
function isPlainSafeLast(c) {
// just not whitespace or colon, it will be checked to be plain character later
return !isWhitespace(c) && c !== CHAR_COLON;
}
2021-01-08 20:47:49 +00:00
// Same as 'string'.codePointAt(pos), but works in older browsers.
function codePointAt(string, pos) {
var first = string.charCodeAt(pos), second;
if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {
second = string.charCodeAt(pos + 1);
if (second >= 0xDC00 && second <= 0xDFFF) {
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
}
}
return first;
}
2021-01-08 20:47:49 +00:00
// Determines whether block indentation indicator is required.
function needIndentIndicator(string) {
var leadingSpaceRe = /^\n* /;
return leadingSpaceRe.test(string);
}
2021-01-08 20:47:49 +00:00
var STYLE_PLAIN = 1,
STYLE_SINGLE = 2,
STYLE_LITERAL = 3,
STYLE_FOLDED = 4,
STYLE_DOUBLE = 5;
2021-01-08 20:47:49 +00:00
// Determines which scalar styles are possible and returns the preferred style.
// lineWidth = -1 => no limit.
// Pre-conditions: str.length > 0.
// Post-conditions:
// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string.
// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).
// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).
function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,
testAmbiguousType, quotingType, forceQuotes, inblock) {
2021-01-08 20:47:49 +00:00
var i;
var char = 0;
var prevChar = null;
var hasLineBreak = false;
var hasFoldableLine = false; // only checked if shouldTrackWidth
var shouldTrackWidth = lineWidth !== -1;
var previousLineBreak = -1; // count the first line correctly
var plain = isPlainSafeFirst(codePointAt(string, 0))
&& isPlainSafeLast(codePointAt(string, string.length - 1));
2021-01-08 20:47:49 +00:00
if (singleLineOnly || forceQuotes) {
// Case: no block styles.
// Check for disallowed characters to rule out plain and single.
for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
char = codePointAt(string, i);
if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
plain = plain && isPlainSafe(char, prevChar, inblock);
prevChar = char;
}
} else {
// Case: block styles permitted.
for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
char = codePointAt(string, i);
if (char === CHAR_LINE_FEED) {
hasLineBreak = true;
// Check if any line can be folded.
if (shouldTrackWidth) {
hasFoldableLine = hasFoldableLine ||
// Foldable line = too long, and not more-indented.
(i - previousLineBreak - 1 > lineWidth &&
string[previousLineBreak + 1] !== ' ');
previousLineBreak = i;
}
} else if (!isPrintable(char)) {
return STYLE_DOUBLE;
}
plain = plain && isPlainSafe(char, prevChar, inblock);
prevChar = char;
}
// in case the end is missing a \n
hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&
(i - previousLineBreak - 1 > lineWidth &&
string[previousLineBreak + 1] !== ' '));
}
// Although every style can represent \n without escaping, prefer block styles
// for multiline, since they're more readable and they don't add empty lines.
// Also prefer folding a super-long line.
if (!hasLineBreak && !hasFoldableLine) {
// Strings interpretable as another type have to be quoted;
// e.g. the string 'true' vs. the boolean true.
if (plain && !forceQuotes && !testAmbiguousType(string)) {
return STYLE_PLAIN;
}
return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
}
// Edge case: block indentation indicator can only have one digit.
if (indentPerLevel > 9 && needIndentIndicator(string)) {
return STYLE_DOUBLE;
}
// At this point we know block styles are valid.
// Prefer literal style unless we want to fold.
if (!forceQuotes) {
return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;
}
return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;
}
2021-01-08 20:47:49 +00:00
// Note: line breaking/folding is implemented for only the folded style.
// NB. We drop the last trailing newline (if any) of a returned block scalar
// since the dumper adds its own newline. This always works:
// • No ending newline => unaffected; already using strip "-" chomping.
// • Ending newline => removed then restored.
// Importantly, this keeps the "+" chomp indicator from gaining an extra line.
function writeScalar(state, string, level, iskey, inblock) {
state.dump = (function () {
if (string.length === 0) {
return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''";
}
if (!state.noCompatMode) {
if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {
return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'");
}
}
2021-01-08 20:47:49 +00:00
var indent = state.indent * Math.max(1, level); // no 0-indent scalars
// As indentation gets deeper, let the width decrease monotonically
// to the lower bound min(state.lineWidth, 40).
// Note that this implies
// state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.
// state.lineWidth > 40 + state.indent: width decreases until the lower bound.
// This behaves better than a constant minimum width which disallows narrower options,
// or an indent threshold which causes the width to suddenly increase.
var lineWidth = state.lineWidth === -1
? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
2021-01-08 20:47:49 +00:00
// Without knowing if keys are implicit/explicit, assume implicit for safety.
var singleLineOnly = iskey
// No block styles in flow mode.
|| (state.flowLevel > -1 && level >= state.flowLevel);
function testAmbiguity(string) {
return testImplicitResolving(state, string);
}
2021-01-08 20:47:49 +00:00
switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,
testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {
2021-01-08 20:47:49 +00:00
case STYLE_PLAIN:
return string;
case STYLE_SINGLE:
return "'" + string.replace(/'/g, "''") + "'";
case STYLE_LITERAL:
return '|' + blockHeader(string, state.indent)
+ dropEndingNewline(indentString(string, indent));
case STYLE_FOLDED:
return '>' + blockHeader(string, state.indent)
+ dropEndingNewline(indentString(foldString(string, lineWidth), indent));
case STYLE_DOUBLE:
return '"' + escapeString(string, lineWidth) + '"';
default:
throw new YAMLException('impossible error: invalid scalar style');
}
}());
2021-01-08 20:47:49 +00:00
}
// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.
function blockHeader(string, indentPerLevel) {
var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';
2021-01-08 20:47:49 +00:00
// note the special case: the string '\n' counts as a "trailing" empty line.
var clip = string[string.length - 1] === '\n';
var keep = clip && (string[string.length - 2] === '\n' || string === '\n');
var chomp = keep ? '+' : (clip ? '' : '-');
2021-01-08 20:47:49 +00:00
return indentIndicator + chomp + '\n';
}
2021-01-08 20:47:49 +00:00
// (See the note for writeScalar.)
function dropEndingNewline(string) {
return string[string.length - 1] === '\n' ? string.slice(0, -1) : string;
}
2021-01-08 20:47:49 +00:00
// Note: a long line without a suitable break point will exceed the width limit.
// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.
function foldString(string, width) {
// In folded style, $k$ consecutive newlines output as $k+1$ newlines—
// unless they're before or after a more-indented line, or at the very
// beginning or end, in which case $k$ maps to $k$.
// Therefore, parse each chunk as newline(s) followed by a content line.
var lineRe = /(\n+)([^\n]*)/g;
2021-01-08 20:47:49 +00:00
// first line (possibly an empty line)
var result = (function () {
var nextLF = string.indexOf('\n');
nextLF = nextLF !== -1 ? nextLF : string.length;
lineRe.lastIndex = nextLF;
return foldLine(string.slice(0, nextLF), width);
}());
// If we haven't reached the first content line yet, don't add an extra \n.
var prevMoreIndented = string[0] === '\n' || string[0] === ' ';
var moreIndented;
// rest of the lines
var match;
while ((match = lineRe.exec(string))) {
var prefix = match[1], line = match[2];
moreIndented = (line[0] === ' ');
result += prefix
+ (!prevMoreIndented && !moreIndented && line !== ''
? '\n' : '')
+ foldLine(line, width);
prevMoreIndented = moreIndented;
2021-01-08 20:47:49 +00:00
}
return result;
}
2021-01-08 20:47:49 +00:00
// Greedy line breaking.
// Picks the longest line under the limit each time,
// otherwise settles for the shortest line over the limit.
// NB. More-indented lines *cannot* be folded, as that would add an extra \n.
function foldLine(line, width) {
if (line === '' || line[0] === ' ') return line;
2021-01-08 20:47:49 +00:00
// Since a more-indented line adds a \n, breaks can't be followed by a space.
var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.
var match;
// start is an inclusive index. end, curr, and next are exclusive.
var start = 0, end, curr = 0, next = 0;
var result = '';
// Invariants: 0 <= start <= length-1.
// 0 <= curr <= next <= max(0, length-2). curr - start <= width.
// Inside the loop:
// A match implies length >= 2, so curr and next are <= length-2.
while ((match = breakRe.exec(line))) {
next = match.index;
// maintain invariant: curr - start <= width
if (next - start > width) {
end = (curr > start) ? curr : next; // derive end <= length-2
result += '\n' + line.slice(start, end);
// skip the space that was output as \n
start = end + 1; // derive start <= length-1
2021-01-08 20:47:49 +00:00
}
curr = next;
2021-01-08 20:47:49 +00:00
}
// By the invariants, start <= length-1, so there is something left over.
// It is either the whole string or a part starting from non-whitespace.
result += '\n';
// Insert a break if the remainder is too long and there is a break available.
if (line.length - start > width && curr > start) {
result += line.slice(start, curr) + '\n' + line.slice(curr + 1);
} else {
result += line.slice(start);
2021-01-08 20:47:49 +00:00
}
return result.slice(1); // drop extra \n joiner
2021-01-08 20:47:49 +00:00
}
// Escapes a double-quoted string.
function escapeString(string) {
var result = '';
var char = 0;
var escapeSeq;
2021-01-08 20:47:49 +00:00
for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {
char = codePointAt(string, i);
escapeSeq = ESCAPE_SEQUENCES[char];
2021-04-16 13:23:55 +00:00
if (!escapeSeq && isPrintable(char)) {
result += string[i];
if (char >= 0x10000) result += string[i + 1];
} else {
result += escapeSeq || encodeHex(char);
}
}
2021-04-16 13:23:55 +00:00
return result;
2021-04-16 13:23:55 +00:00
}
function writeFlowSequence(state, level, object) {
var _result = '',
_tag = state.tag,
index,
length,
value;
2021-04-16 13:23:55 +00:00
for (index = 0, length = object.length; index < length; index += 1) {
value = object[index];
2021-04-16 13:23:55 +00:00
if (state.replacer) {
value = state.replacer.call(object, String(index), value);
}
2021-04-16 13:23:55 +00:00
// Write only valid elements, put null instead of invalid elements.
if (writeNode(state, level, value, false, false) ||
(typeof value === 'undefined' &&
writeNode(state, level, null, false, false))) {
2021-04-16 13:23:55 +00:00
if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');
_result += state.dump;
2021-04-16 13:23:55 +00:00
}
}
state.tag = _tag;
state.dump = '[' + _result + ']';
2021-04-16 13:23:55 +00:00
}
function writeBlockSequence(state, level, object, compact) {
var _result = '',
_tag = state.tag,
index,
length,
value;
2021-04-16 13:23:55 +00:00
for (index = 0, length = object.length; index < length; index += 1) {
value = object[index];
2021-04-16 13:23:55 +00:00
if (state.replacer) {
value = state.replacer.call(object, String(index), value);
}
2021-04-16 13:23:55 +00:00
// Write only valid elements, put null instead of invalid elements.
if (writeNode(state, level + 1, value, true, true, false, true) ||
(typeof value === 'undefined' &&
writeNode(state, level + 1, null, true, true, false, true))) {
2021-04-16 13:23:55 +00:00
if (!compact || _result !== '') {
_result += generateNextLine(state, level);
}
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
_result += '-';
} else {
_result += '- ';
}
_result += state.dump;
2021-04-16 13:23:55 +00:00
}
}
state.tag = _tag;
state.dump = _result || '[]'; // Empty sequence if no valid values.
2021-04-16 13:23:55 +00:00
}
function writeFlowMapping(state, level, object) {
var _result = '',
_tag = state.tag,
objectKeyList = Object.keys(object),
index,
length,
objectKey,
objectValue,
pairBuffer;
2021-04-16 13:23:55 +00:00
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
2021-04-16 13:23:55 +00:00
pairBuffer = '';
if (_result !== '') pairBuffer += ', ';
2021-04-16 13:23:55 +00:00
if (state.condenseFlow) pairBuffer += '"';
2021-04-16 13:23:55 +00:00
objectKey = objectKeyList[index];
objectValue = object[objectKey];
2021-04-16 13:23:55 +00:00
if (state.replacer) {
objectValue = state.replacer.call(object, objectKey, objectValue);
}
2021-04-16 13:23:55 +00:00
if (!writeNode(state, level, objectKey, false, false)) {
continue; // Skip this pair because of invalid key;
}
2021-04-16 13:23:55 +00:00
if (state.dump.length > 1024) pairBuffer += '? ';
2021-04-16 13:23:55 +00:00
pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ');
2021-04-16 13:23:55 +00:00
if (!writeNode(state, level, objectValue, false, false)) {
continue; // Skip this pair because of invalid value.
}
2021-04-16 13:23:55 +00:00
pairBuffer += state.dump;
2021-04-16 13:23:55 +00:00
// Both key and value are valid.
_result += pairBuffer;
}
2021-04-16 13:23:55 +00:00
state.tag = _tag;
state.dump = '{' + _result + '}';
2021-04-16 13:23:55 +00:00
}
function writeBlockMapping(state, level, object, compact) {
var _result = '',
_tag = state.tag,
objectKeyList = Object.keys(object),
index,
length,
objectKey,
objectValue,
explicitPair,
pairBuffer;
2021-04-16 13:23:55 +00:00
// Allow sorting keys so that the output file is deterministic
if (state.sortKeys === true) {
// Default sorting
objectKeyList.sort();
} else if (typeof state.sortKeys === 'function') {
// Custom sort function
objectKeyList.sort(state.sortKeys);
} else if (state.sortKeys) {
// Something is wrong
throw new YAMLException('sortKeys must be a boolean or a function');
}
2021-04-16 13:23:55 +00:00
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
pairBuffer = '';
2021-04-16 13:23:55 +00:00
if (!compact || _result !== '') {
pairBuffer += generateNextLine(state, level);
}
2021-01-08 20:47:49 +00:00
objectKey = objectKeyList[index];
objectValue = object[objectKey];
2021-01-08 20:47:49 +00:00
if (state.replacer) {
objectValue = state.replacer.call(object, objectKey, objectValue);
}
2021-01-08 20:47:49 +00:00
if (!writeNode(state, level + 1, objectKey, true, true, true)) {
continue; // Skip this pair because of invalid key.
}
explicitPair = (state.tag !== null && state.tag !== '?') ||
(state.dump && state.dump.length > 1024);
if (explicitPair) {
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += '?';
} else {
pairBuffer += '? ';
}
}
2021-01-08 20:47:49 +00:00
pairBuffer += state.dump;
2021-01-08 20:47:49 +00:00
if (explicitPair) {
pairBuffer += generateNextLine(state, level);
}
2021-01-08 20:47:49 +00:00
if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {
continue; // Skip this pair because of invalid value.
}
2021-01-08 20:47:49 +00:00
if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {
pairBuffer += ':';
} else {
pairBuffer += ': ';
}
2021-01-08 20:47:49 +00:00
pairBuffer += state.dump;
2021-01-08 20:47:49 +00:00
// Both key and value are valid.
_result += pairBuffer;
}
2021-01-08 20:47:49 +00:00
state.tag = _tag;
state.dump = _result || '{}'; // Empty mapping if no valid pairs.
}
2021-01-08 20:47:49 +00:00
function detectType(state, object, explicit) {
var _result, typeList, index, length, type, style;
2021-01-08 20:47:49 +00:00
typeList = explicit ? state.explicitTypes : state.implicitTypes;
2021-01-08 20:47:49 +00:00
for (index = 0, length = typeList.length; index < length; index += 1) {
type = typeList[index];
2021-01-08 20:47:49 +00:00
if ((type.instanceOf || type.predicate) &&
(!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&
(!type.predicate || type.predicate(object))) {
2021-01-08 20:47:49 +00:00
if (explicit) {
if (type.multi && type.representName) {
state.tag = type.representName(object);
} else {
state.tag = type.tag;
}
} else {
state.tag = '?';
}
2021-01-08 20:47:49 +00:00
if (type.represent) {
style = state.styleMap[type.tag] || type.defaultStyle;
2021-01-08 20:47:49 +00:00
if (_toString.call(type.represent) === '[object Function]') {
_result = type.represent(object, style);
} else if (_hasOwnProperty.call(type.represent, style)) {
_result = type.represent[style](object, style);
} else {
throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style');
}
2021-01-08 20:47:49 +00:00
state.dump = _result;
}
2021-01-08 20:47:49 +00:00
return true;
}
}
2021-01-08 20:47:49 +00:00
return false;
}
2021-01-08 20:47:49 +00:00
// Serializes `object` and writes it to global `result`.
// Returns true on success, or false on invalid object.
//
function writeNode(state, level, object, block, compact, iskey, isblockseq) {
state.tag = null;
state.dump = object;
2021-01-08 20:47:49 +00:00
if (!detectType(state, object, false)) {
detectType(state, object, true);
}
2021-01-08 20:47:49 +00:00
var type = _toString.call(state.dump);
var inblock = block;
var tagStr;
2021-01-08 20:47:49 +00:00
if (block) {
block = (state.flowLevel < 0 || state.flowLevel > level);
}
2021-01-08 20:47:49 +00:00
var objectOrArray = type === '[object Object]' || type === '[object Array]',
duplicateIndex,
duplicate;
2021-01-08 20:47:49 +00:00
if (objectOrArray) {
duplicateIndex = state.duplicates.indexOf(object);
duplicate = duplicateIndex !== -1;
}
2021-01-08 20:47:49 +00:00
if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {
compact = false;
2021-01-08 20:47:49 +00:00
}
if (duplicate && state.usedDuplicates[duplicateIndex]) {
state.dump = '*ref_' + duplicateIndex;
} else {
if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
state.usedDuplicates[duplicateIndex] = true;
}
if (type === '[object Object]') {
if (block && (Object.keys(state.dump).length !== 0)) {
writeBlockMapping(state, level, state.dump, compact);
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowMapping(state, level, state.dump);
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
}
} else if (type === '[object Array]') {
if (block && (state.dump.length !== 0)) {
if (state.noArrayIndent && !isblockseq && level > 0) {
writeBlockSequence(state, level - 1, state.dump, compact);
} else {
writeBlockSequence(state, level, state.dump, compact);
}
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + state.dump;
}
} else {
writeFlowSequence(state, level, state.dump);
if (duplicate) {
state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;
}
}
} else if (type === '[object String]') {
if (state.tag !== '?') {
writeScalar(state, state.dump, level, iskey, inblock);
}
} else if (type === '[object Undefined]') {
return false;
} else {
if (state.skipInvalid) return false;
throw new YAMLException('unacceptable kind of an object to dump ' + type);
}
if (state.tag !== null && state.tag !== '?') {
// Need to encode all characters except those allowed by the spec:
//
// [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */
// [36] ns-hex-digit ::= ns-dec-digit
// | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */
// [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */
// [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”
// [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”
// | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”
// | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”
//
// Also need to encode '!' because it has special meaning (end of tag prefix).
//
tagStr = encodeURI(
state.tag[0] === '!' ? state.tag.slice(1) : state.tag
).replace(/!/g, '%21');
2021-01-08 20:47:49 +00:00
if (state.tag[0] === '!') {
tagStr = '!' + tagStr;
} else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {
tagStr = '!!' + tagStr.slice(18);
} else {
tagStr = '!<' + tagStr + '>';
}
2021-01-08 20:47:49 +00:00
state.dump = tagStr + ' ' + state.dump;
}
2021-01-08 20:47:49 +00:00
}
return true;
2021-01-08 20:47:49 +00:00
}
function getDuplicateReferences(object, state) {
var objects = [],
duplicatesIndexes = [],
index,
length;
2021-01-08 20:47:49 +00:00
inspectNode(object, objects, duplicatesIndexes);
2021-01-08 20:47:49 +00:00
for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {
state.duplicates.push(objects[duplicatesIndexes[index]]);
2021-01-08 20:47:49 +00:00
}
state.usedDuplicates = new Array(length);
2021-01-08 20:47:49 +00:00
}
function inspectNode(object, objects, duplicatesIndexes) {
var objectKeyList,
index,
length;
2021-01-08 20:47:49 +00:00
if (object !== null && typeof object === 'object') {
index = objects.indexOf(object);
if (index !== -1) {
if (duplicatesIndexes.indexOf(index) === -1) {
duplicatesIndexes.push(index);
}
} else {
objects.push(object);
2021-01-08 20:47:49 +00:00
if (Array.isArray(object)) {
for (index = 0, length = object.length; index < length; index += 1) {
inspectNode(object[index], objects, duplicatesIndexes);
}
} else {
objectKeyList = Object.keys(object);
2021-01-08 20:47:49 +00:00
for (index = 0, length = objectKeyList.length; index < length; index += 1) {
inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);
}
}
}
}
2021-01-08 20:47:49 +00:00
}
function dump(input, options) {
options = options || {};
2021-01-08 20:47:49 +00:00
var state = new State(options);
2021-01-08 20:47:49 +00:00
if (!state.noRefs) getDuplicateReferences(input, state);
2021-01-08 20:47:49 +00:00
var value = input;
2021-01-08 20:47:49 +00:00
if (state.replacer) {
value = state.replacer.call({ '': value }, '', value);
2021-01-08 20:47:49 +00:00
}
if (writeNode(state, 0, value, true, true)) return state.dump + '\n';
2021-01-08 20:47:49 +00:00
return '';
2021-01-08 20:47:49 +00:00
}
module.exports.dump = dump;
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8179:
/***/ ((module) => {
2021-01-08 20:47:49 +00:00
"use strict";
// YAML error class. http://stackoverflow.com/questions/8458984
//
2021-01-08 20:47:49 +00:00
function formatError(exception, compact) {
var where = '', message = exception.reason || '(unknown reason)';
2021-01-08 20:47:49 +00:00
if (!exception.mark) return message;
2021-01-08 20:47:49 +00:00
if (exception.mark.name) {
where += 'in "' + exception.mark.name + '" ';
2021-01-08 20:47:49 +00:00
}
where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';
2021-01-08 20:47:49 +00:00
if (!compact && exception.mark.snippet) {
where += '\n\n' + exception.mark.snippet;
2021-01-08 20:47:49 +00:00
}
return message + ' ' + where;
2021-01-08 20:47:49 +00:00
}
function YAMLException(reason, mark) {
// Super constructor
Error.call(this);
2021-01-08 20:47:49 +00:00
this.name = 'YAMLException';
this.reason = reason;
this.mark = mark;
this.message = formatError(this, false);
2021-01-08 20:47:49 +00:00
// Include stack trace in error object
if (Error.captureStackTrace) {
// Chrome and NodeJS
Error.captureStackTrace(this, this.constructor);
} else {
// FF, IE 10+ and Safari 6+. Fallback for others
this.stack = (new Error()).stack || '';
2021-01-08 20:47:49 +00:00
}
}
// Inherit from Error
YAMLException.prototype = Object.create(Error.prototype);
YAMLException.prototype.constructor = YAMLException;
2021-01-08 20:47:49 +00:00
YAMLException.prototype.toString = function toString(compact) {
return this.name + ': ' + formatError(this, compact);
};
2021-01-08 20:47:49 +00:00
module.exports = YAMLException;
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1161:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
/*eslint-disable max-len,no-use-before-define*/
2021-01-08 20:47:49 +00:00
var common = __nccwpck_require__(6829);
var YAMLException = __nccwpck_require__(8179);
var makeSnippet = __nccwpck_require__(6975);
var DEFAULT_SCHEMA = __nccwpck_require__(8759);
2021-01-08 20:47:49 +00:00
var _hasOwnProperty = Object.prototype.hasOwnProperty;
2021-01-08 20:47:49 +00:00
var CONTEXT_FLOW_IN = 1;
var CONTEXT_FLOW_OUT = 2;
var CONTEXT_BLOCK_IN = 3;
var CONTEXT_BLOCK_OUT = 4;
2021-01-08 20:47:49 +00:00
var CHOMPING_CLIP = 1;
var CHOMPING_STRIP = 2;
var CHOMPING_KEEP = 3;
2021-01-08 20:47:49 +00:00
var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
2021-01-08 20:47:49 +00:00
function _class(obj) { return Object.prototype.toString.call(obj); }
function is_EOL(c) {
return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);
}
function is_WHITE_SPACE(c) {
return (c === 0x09/* Tab */) || (c === 0x20/* Space */);
}
function is_WS_OR_EOL(c) {
return (c === 0x09/* Tab */) ||
(c === 0x20/* Space */) ||
(c === 0x0A/* LF */) ||
(c === 0x0D/* CR */);
}
2021-01-08 20:47:49 +00:00
function is_FLOW_INDICATOR(c) {
return c === 0x2C/* , */ ||
c === 0x5B/* [ */ ||
c === 0x5D/* ] */ ||
c === 0x7B/* { */ ||
c === 0x7D/* } */;
}
2021-01-08 20:47:49 +00:00
function fromHexCode(c) {
var lc;
2021-01-08 20:47:49 +00:00
if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
return c - 0x30;
}
2021-01-08 20:47:49 +00:00
/*eslint-disable no-bitwise*/
lc = c | 0x20;
2021-01-08 20:47:49 +00:00
if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {
return lc - 0x61 + 10;
}
2021-01-08 20:47:49 +00:00
return -1;
}
2021-01-08 20:47:49 +00:00
function escapedHexLen(c) {
if (c === 0x78/* x */) { return 2; }
if (c === 0x75/* u */) { return 4; }
if (c === 0x55/* U */) { return 8; }
return 0;
2021-01-08 20:47:49 +00:00
}
function fromDecimalCode(c) {
if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {
return c - 0x30;
2021-01-08 20:47:49 +00:00
}
return -1;
}
function simpleEscapeSequence(c) {
/* eslint-disable indent */
return (c === 0x30/* 0 */) ? '\x00' :
(c === 0x61/* a */) ? '\x07' :
(c === 0x62/* b */) ? '\x08' :
(c === 0x74/* t */) ? '\x09' :
(c === 0x09/* Tab */) ? '\x09' :
(c === 0x6E/* n */) ? '\x0A' :
(c === 0x76/* v */) ? '\x0B' :
(c === 0x66/* f */) ? '\x0C' :
(c === 0x72/* r */) ? '\x0D' :
(c === 0x65/* e */) ? '\x1B' :
(c === 0x20/* Space */) ? ' ' :
(c === 0x22/* " */) ? '\x22' :
(c === 0x2F/* / */) ? '/' :
(c === 0x5C/* \ */) ? '\x5C' :
(c === 0x4E/* N */) ? '\x85' :
(c === 0x5F/* _ */) ? '\xA0' :
(c === 0x4C/* L */) ? '\u2028' :
(c === 0x50/* P */) ? '\u2029' : '';
2021-01-08 20:47:49 +00:00
}
function charFromCodepoint(c) {
if (c <= 0xFFFF) {
return String.fromCharCode(c);
}
// Encode UTF-16 surrogate pair
// https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF
return String.fromCharCode(
((c - 0x010000) >> 10) + 0xD800,
((c - 0x010000) & 0x03FF) + 0xDC00
);
}
2021-01-08 20:47:49 +00:00
var simpleEscapeCheck = new Array(256); // integer, for fast access
var simpleEscapeMap = new Array(256);
for (var i = 0; i < 256; i++) {
simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
simpleEscapeMap[i] = simpleEscapeSequence(i);
}
2021-01-08 20:47:49 +00:00
function State(input, options) {
this.input = input;
2021-01-08 20:47:49 +00:00
this.filename = options['filename'] || null;
this.schema = options['schema'] || DEFAULT_SCHEMA;
this.onWarning = options['onWarning'] || null;
// (Hidden) Remove? makes the loader to expect YAML 1.1 documents
// if such documents have no explicit %YAML directive
this.legacy = options['legacy'] || false;
2021-01-08 20:47:49 +00:00
this.json = options['json'] || false;
this.listener = options['listener'] || null;
2021-01-08 20:47:49 +00:00
this.implicitTypes = this.schema.compiledImplicit;
this.typeMap = this.schema.compiledTypeMap;
2021-01-08 20:47:49 +00:00
this.length = input.length;
this.position = 0;
this.line = 0;
this.lineStart = 0;
this.lineIndent = 0;
2021-01-08 20:47:49 +00:00
// position of first leading tab in the current line,
// used to make sure there are no tabs in the indentation
this.firstTabInLine = -1;
2021-01-08 20:47:49 +00:00
this.documents = [];
2021-01-08 20:47:49 +00:00
/*
this.version;
this.checkLineBreaks;
this.tagMap;
this.anchorMap;
this.tag;
this.anchor;
this.kind;
this.result;*/
2021-01-08 20:47:49 +00:00
}
function generateError(state, message) {
var mark = {
name: state.filename,
buffer: state.input.slice(0, -1), // omit trailing \0
position: state.position,
line: state.line,
column: state.position - state.lineStart
};
mark.snippet = makeSnippet(mark);
return new YAMLException(message, mark);
2021-01-08 20:47:49 +00:00
}
function throwError(state, message) {
throw generateError(state, message);
2021-01-08 20:47:49 +00:00
}
function throwWarning(state, message) {
if (state.onWarning) {
state.onWarning.call(null, generateError(state, message));
2021-01-08 20:47:49 +00:00
}
}
var directiveHandlers = {
2021-01-08 20:47:49 +00:00
YAML: function handleYamlDirective(state, name, args) {
2021-01-08 20:47:49 +00:00
var match, major, minor;
2021-01-08 20:47:49 +00:00
if (state.version !== null) {
throwError(state, 'duplication of %YAML directive');
}
2021-01-08 20:47:49 +00:00
if (args.length !== 1) {
throwError(state, 'YAML directive accepts exactly one argument');
}
2021-01-08 20:47:49 +00:00
match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
2021-01-08 20:47:49 +00:00
if (match === null) {
throwError(state, 'ill-formed argument of the YAML directive');
}
2021-01-08 20:47:49 +00:00
major = parseInt(match[1], 10);
minor = parseInt(match[2], 10);
2021-01-08 20:47:49 +00:00
if (major !== 1) {
throwError(state, 'unacceptable YAML version of the document');
}
2021-01-08 20:47:49 +00:00
state.version = args[0];
state.checkLineBreaks = (minor < 2);
2021-01-08 20:47:49 +00:00
if (minor !== 1 && minor !== 2) {
throwWarning(state, 'unsupported YAML version of the document');
}
},
2021-01-08 20:47:49 +00:00
TAG: function handleTagDirective(state, name, args) {
2021-01-08 20:47:49 +00:00
var handle, prefix;
2021-01-08 20:47:49 +00:00
if (args.length !== 2) {
throwError(state, 'TAG directive accepts exactly two arguments');
}
handle = args[0];
prefix = args[1];
if (!PATTERN_TAG_HANDLE.test(handle)) {
throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');
}
if (_hasOwnProperty.call(state.tagMap, handle)) {
throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
}
if (!PATTERN_TAG_URI.test(prefix)) {
throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');
}
try {
prefix = decodeURIComponent(prefix);
} catch (err) {
throwError(state, 'tag prefix is malformed: ' + prefix);
}
2021-01-08 20:47:49 +00:00
state.tagMap[handle] = prefix;
2021-01-08 20:47:49 +00:00
}
};
2021-01-08 20:47:49 +00:00
function captureSegment(state, start, end, checkJson) {
var _position, _length, _character, _result;
2021-01-08 20:47:49 +00:00
if (start < end) {
_result = state.input.slice(start, end);
2021-01-08 20:47:49 +00:00
if (checkJson) {
for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
_character = _result.charCodeAt(_position);
if (!(_character === 0x09 ||
(0x20 <= _character && _character <= 0x10FFFF))) {
throwError(state, 'expected valid JSON character');
}
}
} else if (PATTERN_NON_PRINTABLE.test(_result)) {
throwError(state, 'the stream contains non-printable characters');
}
2021-01-08 20:47:49 +00:00
state.result += _result;
}
2021-01-08 20:47:49 +00:00
}
function mergeMappings(state, destination, source, overridableKeys) {
var sourceKeys, key, index, quantity;
2021-01-08 20:47:49 +00:00
if (!common.isObject(source)) {
throwError(state, 'cannot merge mappings; the provided source object is unacceptable');
2021-01-08 20:47:49 +00:00
}
sourceKeys = Object.keys(source);
for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
key = sourceKeys[index];
if (!_hasOwnProperty.call(destination, key)) {
destination[key] = source[key];
overridableKeys[key] = true;
2021-01-08 20:47:49 +00:00
}
}
}
function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,
startLine, startLineStart, startPos) {
2021-01-08 20:47:49 +00:00
var index, quantity;
// The output is a plain object here, so keys can only be strings.
// We need to convert keyNode to a string, but doing so can hang the process
// (deeply nested arrays that explode exponentially using aliases).
if (Array.isArray(keyNode)) {
keyNode = Array.prototype.slice.call(keyNode);
for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
if (Array.isArray(keyNode[index])) {
throwError(state, 'nested arrays are not supported inside keys');
}
if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {
keyNode[index] = '[object Object]';
2021-01-08 20:47:49 +00:00
}
}
}
// Avoid code execution in load() via toString property
// (still use its own toString for arrays, timestamps,
// and whatever user schema extensions happen to have @@toStringTag)
if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {
keyNode = '[object Object]';
2021-01-08 20:47:49 +00:00
}
keyNode = String(keyNode);
2021-01-08 20:47:49 +00:00
if (_result === null) {
_result = {};
}
2021-01-08 20:47:49 +00:00
if (keyTag === 'tag:yaml.org,2002:merge') {
if (Array.isArray(valueNode)) {
for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
mergeMappings(state, _result, valueNode[index], overridableKeys);
}
} else {
mergeMappings(state, _result, valueNode, overridableKeys);
}
} else {
if (!state.json &&
!_hasOwnProperty.call(overridableKeys, keyNode) &&
_hasOwnProperty.call(_result, keyNode)) {
state.line = startLine || state.line;
state.lineStart = startLineStart || state.lineStart;
state.position = startPos || state.position;
throwError(state, 'duplicated mapping key');
}
2021-01-08 20:47:49 +00:00
// used for this specific key only because Object.defineProperty is slow
if (keyNode === '__proto__') {
Object.defineProperty(_result, keyNode, {
configurable: true,
enumerable: true,
writable: true,
value: valueNode
});
} else {
_result[keyNode] = valueNode;
}
delete overridableKeys[keyNode];
2021-01-08 20:47:49 +00:00
}
return _result;
2021-01-08 20:47:49 +00:00
}
function readLineBreak(state) {
var ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x0A/* LF */) {
state.position++;
} else if (ch === 0x0D/* CR */) {
state.position++;
if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {
state.position++;
}
} else {
throwError(state, 'a line break is expected');
2021-01-08 20:47:49 +00:00
}
state.line += 1;
state.lineStart = state.position;
state.firstTabInLine = -1;
2021-01-08 20:47:49 +00:00
}
function skipSeparationSpace(state, allowComments, checkIndent) {
var lineBreaks = 0,
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {
state.firstTabInLine = state.position;
}
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (allowComments && ch === 0x23/* # */) {
do {
ch = state.input.charCodeAt(++state.position);
} while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);
2021-01-08 20:47:49 +00:00
}
if (is_EOL(ch)) {
readLineBreak(state);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
lineBreaks++;
state.lineIndent = 0;
2021-01-08 20:47:49 +00:00
while (ch === 0x20/* Space */) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
} else {
break;
}
}
2021-01-08 20:47:49 +00:00
if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
throwWarning(state, 'deficient indentation');
}
2021-01-08 20:47:49 +00:00
return lineBreaks;
2021-01-08 20:47:49 +00:00
}
function testDocumentSeparator(state) {
var _position = state.position,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(_position);
2021-01-08 20:47:49 +00:00
// Condition state.position === state.lineStart is tested
// in parent on each call, for efficiency. No needs to test here again.
if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&
ch === state.input.charCodeAt(_position + 1) &&
ch === state.input.charCodeAt(_position + 2)) {
2021-01-08 20:47:49 +00:00
_position += 3;
ch = state.input.charCodeAt(_position);
2021-01-08 20:47:49 +00:00
if (ch === 0 || is_WS_OR_EOL(ch)) {
return true;
}
}
2021-01-08 20:47:49 +00:00
return false;
}
2021-01-08 20:47:49 +00:00
function writeFoldedLines(state, count) {
if (count === 1) {
state.result += ' ';
} else if (count > 1) {
state.result += common.repeat('\n', count - 1);
}
}
2021-01-08 20:47:49 +00:00
function readPlainScalar(state, nodeIndent, withinFlowCollection) {
var preceding,
following,
captureStart,
captureEnd,
hasPendingContent,
_line,
_lineStart,
_lineIndent,
_kind = state.kind,
_result = state.result,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (is_WS_OR_EOL(ch) ||
is_FLOW_INDICATOR(ch) ||
ch === 0x23/* # */ ||
ch === 0x26/* & */ ||
ch === 0x2A/* * */ ||
ch === 0x21/* ! */ ||
ch === 0x7C/* | */ ||
ch === 0x3E/* > */ ||
ch === 0x27/* ' */ ||
ch === 0x22/* " */ ||
ch === 0x25/* % */ ||
ch === 0x40/* @ */ ||
ch === 0x60/* ` */) {
return false;
}
2021-01-08 20:47:49 +00:00
if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {
following = state.input.charCodeAt(state.position + 1);
2021-01-08 20:47:49 +00:00
if (is_WS_OR_EOL(following) ||
withinFlowCollection && is_FLOW_INDICATOR(following)) {
return false;
}
}
2021-01-08 20:47:49 +00:00
state.kind = 'scalar';
state.result = '';
captureStart = captureEnd = state.position;
hasPendingContent = false;
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
if (ch === 0x3A/* : */) {
following = state.input.charCodeAt(state.position + 1);
2021-01-08 20:47:49 +00:00
if (is_WS_OR_EOL(following) ||
withinFlowCollection && is_FLOW_INDICATOR(following)) {
break;
}
2021-01-08 20:47:49 +00:00
} else if (ch === 0x23/* # */) {
preceding = state.input.charCodeAt(state.position - 1);
2021-01-08 20:47:49 +00:00
if (is_WS_OR_EOL(preceding)) {
break;
}
2021-01-08 20:47:49 +00:00
} else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||
withinFlowCollection && is_FLOW_INDICATOR(ch)) {
break;
2021-01-08 20:47:49 +00:00
} else if (is_EOL(ch)) {
_line = state.line;
_lineStart = state.lineStart;
_lineIndent = state.lineIndent;
skipSeparationSpace(state, false, -1);
2021-01-08 20:47:49 +00:00
if (state.lineIndent >= nodeIndent) {
hasPendingContent = true;
ch = state.input.charCodeAt(state.position);
continue;
} else {
state.position = captureEnd;
state.line = _line;
state.lineStart = _lineStart;
state.lineIndent = _lineIndent;
break;
}
2021-01-08 20:47:49 +00:00
}
if (hasPendingContent) {
captureSegment(state, captureStart, captureEnd, false);
writeFoldedLines(state, state.line - _line);
captureStart = captureEnd = state.position;
hasPendingContent = false;
2021-01-08 20:47:49 +00:00
}
if (!is_WHITE_SPACE(ch)) {
captureEnd = state.position + 1;
2021-01-08 20:47:49 +00:00
}
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
captureSegment(state, captureStart, captureEnd, false);
2021-01-08 20:47:49 +00:00
if (state.result) {
return true;
2021-01-08 20:47:49 +00:00
}
state.kind = _kind;
state.result = _result;
return false;
2021-01-08 20:47:49 +00:00
}
function readSingleQuotedScalar(state, nodeIndent) {
var ch,
captureStart, captureEnd;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch !== 0x27/* ' */) {
return false;
}
2021-01-08 20:47:49 +00:00
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
2021-01-08 20:47:49 +00:00
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
if (ch === 0x27/* ' */) {
captureSegment(state, captureStart, state.position, true);
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x27/* ' */) {
captureStart = state.position;
state.position++;
captureEnd = state.position;
} else {
return true;
}
2021-01-08 20:47:49 +00:00
} else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
2021-01-08 20:47:49 +00:00
} else if (state.position === state.lineStart && testDocumentSeparator(state)) {
throwError(state, 'unexpected end of the document within a single quoted scalar');
2021-01-08 20:47:49 +00:00
} else {
state.position++;
captureEnd = state.position;
}
2021-01-08 20:47:49 +00:00
}
throwError(state, 'unexpected end of the stream within a single quoted scalar');
2021-01-08 20:47:49 +00:00
}
function readDoubleQuotedScalar(state, nodeIndent) {
var captureStart,
captureEnd,
hexLength,
hexResult,
tmp,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
if (ch !== 0x22/* " */) {
return false;
2021-01-08 20:47:49 +00:00
}
state.kind = 'scalar';
state.result = '';
state.position++;
captureStart = captureEnd = state.position;
2021-01-08 20:47:49 +00:00
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
if (ch === 0x22/* " */) {
captureSegment(state, captureStart, state.position, true);
state.position++;
return true;
2021-01-08 20:47:49 +00:00
} else if (ch === 0x5C/* \ */) {
captureSegment(state, captureStart, state.position, true);
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if (is_EOL(ch)) {
skipSeparationSpace(state, false, nodeIndent);
2021-01-08 20:47:49 +00:00
// TODO: rework to inline fn with no type cast?
} else if (ch < 256 && simpleEscapeCheck[ch]) {
state.result += simpleEscapeMap[ch];
state.position++;
2021-01-08 20:47:49 +00:00
} else if ((tmp = escapedHexLen(ch)) > 0) {
hexLength = tmp;
hexResult = 0;
2021-01-08 20:47:49 +00:00
for (; hexLength > 0; hexLength--) {
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if ((tmp = fromHexCode(ch)) >= 0) {
hexResult = (hexResult << 4) + tmp;
2021-01-08 20:47:49 +00:00
} else {
throwError(state, 'expected hexadecimal character');
}
}
2021-01-08 20:47:49 +00:00
state.result += charFromCodepoint(hexResult);
2021-01-08 20:47:49 +00:00
state.position++;
2021-01-08 20:47:49 +00:00
} else {
throwError(state, 'unknown escape sequence');
}
2021-01-08 20:47:49 +00:00
captureStart = captureEnd = state.position;
2021-01-08 20:47:49 +00:00
} else if (is_EOL(ch)) {
captureSegment(state, captureStart, captureEnd, true);
writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
captureStart = captureEnd = state.position;
2021-01-08 20:47:49 +00:00
} else if (state.position === state.lineStart && testDocumentSeparator(state)) {
throwError(state, 'unexpected end of the document within a double quoted scalar');
2021-01-08 20:47:49 +00:00
} else {
state.position++;
captureEnd = state.position;
}
2021-01-08 20:47:49 +00:00
}
throwError(state, 'unexpected end of the stream within a double quoted scalar');
2021-01-08 20:47:49 +00:00
}
function readFlowCollection(state, nodeIndent) {
var readNext = true,
_line,
_lineStart,
_pos,
_tag = state.tag,
_result,
_anchor = state.anchor,
following,
terminator,
isPair,
isExplicitPair,
isMapping,
overridableKeys = Object.create(null),
keyNode,
keyTag,
valueNode,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x5B/* [ */) {
terminator = 0x5D;/* ] */
isMapping = false;
_result = [];
} else if (ch === 0x7B/* { */) {
terminator = 0x7D;/* } */
isMapping = true;
_result = {};
} else {
return false;
}
2021-01-08 20:47:49 +00:00
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
skipSeparationSpace(state, true, nodeIndent);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch === terminator) {
state.position++;
state.tag = _tag;
state.anchor = _anchor;
state.kind = isMapping ? 'mapping' : 'sequence';
state.result = _result;
return true;
} else if (!readNext) {
throwError(state, 'missed comma between flow collection entries');
} else if (ch === 0x2C/* , */) {
// "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4
throwError(state, "expected the node content, but found ','");
}
2021-01-08 20:47:49 +00:00
keyTag = keyNode = valueNode = null;
isPair = isExplicitPair = false;
2021-01-08 20:47:49 +00:00
if (ch === 0x3F/* ? */) {
following = state.input.charCodeAt(state.position + 1);
2021-01-08 20:47:49 +00:00
if (is_WS_OR_EOL(following)) {
isPair = isExplicitPair = true;
state.position++;
skipSeparationSpace(state, true, nodeIndent);
}
2021-01-08 20:47:49 +00:00
}
_line = state.line; // Save the current line.
_lineStart = state.lineStart;
_pos = state.position;
composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
keyTag = state.tag;
keyNode = state.result;
skipSeparationSpace(state, true, nodeIndent);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {
isPair = true;
ch = state.input.charCodeAt(++state.position);
skipSeparationSpace(state, true, nodeIndent);
composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
valueNode = state.result;
2021-01-08 20:47:49 +00:00
}
if (isMapping) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
} else if (isPair) {
_result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));
} else {
_result.push(keyNode);
2021-01-08 20:47:49 +00:00
}
skipSeparationSpace(state, true, nodeIndent);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x2C/* , */) {
readNext = true;
ch = state.input.charCodeAt(++state.position);
} else {
readNext = false;
}
}
2021-01-08 20:47:49 +00:00
throwError(state, 'unexpected end of the stream within a flow collection');
2021-01-08 20:47:49 +00:00
}
function readBlockScalar(state, nodeIndent) {
var captureStart,
folding,
chomping = CHOMPING_CLIP,
didReadContent = false,
detectedIndent = false,
textIndent = nodeIndent,
emptyLines = 0,
atMoreIndented = false,
tmp,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
if (ch === 0x7C/* | */) {
folding = false;
} else if (ch === 0x3E/* > */) {
folding = true;
} else {
return false;
2021-01-08 20:47:49 +00:00
}
state.kind = 'scalar';
state.result = '';
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {
if (CHOMPING_CLIP === chomping) {
chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;
} else {
throwError(state, 'repeat of a chomping mode identifier');
}
2021-01-08 20:47:49 +00:00
} else if ((tmp = fromDecimalCode(ch)) >= 0) {
if (tmp === 0) {
throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');
} else if (!detectedIndent) {
textIndent = nodeIndent + tmp - 1;
detectedIndent = true;
} else {
throwError(state, 'repeat of an indentation width identifier');
}
2021-01-08 20:47:49 +00:00
} else {
break;
}
}
2021-01-08 20:47:49 +00:00
if (is_WHITE_SPACE(ch)) {
do { ch = state.input.charCodeAt(++state.position); }
while (is_WHITE_SPACE(ch));
2021-01-08 20:47:49 +00:00
if (ch === 0x23/* # */) {
do { ch = state.input.charCodeAt(++state.position); }
while (!is_EOL(ch) && (ch !== 0));
}
}
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
readLineBreak(state);
state.lineIndent = 0;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
while ((!detectedIndent || state.lineIndent < textIndent) &&
(ch === 0x20/* Space */)) {
state.lineIndent++;
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (!detectedIndent && state.lineIndent > textIndent) {
textIndent = state.lineIndent;
}
2021-01-08 20:47:49 +00:00
if (is_EOL(ch)) {
emptyLines++;
continue;
}
2021-01-08 20:47:49 +00:00
// End of the scalar.
if (state.lineIndent < textIndent) {
2021-01-08 20:47:49 +00:00
// Perform the chomping.
if (chomping === CHOMPING_KEEP) {
state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
} else if (chomping === CHOMPING_CLIP) {
if (didReadContent) { // i.e. only if the scalar is not empty.
state.result += '\n';
}
}
2021-01-08 20:47:49 +00:00
// Break this `while` cycle and go to the funciton's epilogue.
break;
}
2021-01-08 20:47:49 +00:00
// Folded style: use fancy rules to handle line breaks.
if (folding) {
2021-01-08 20:47:49 +00:00
// Lines starting with white space characters (more-indented lines) are not folded.
if (is_WHITE_SPACE(ch)) {
atMoreIndented = true;
// except for the first content line (cf. Example 8.1)
state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
2021-01-08 20:47:49 +00:00
// End of more-indented block.
} else if (atMoreIndented) {
atMoreIndented = false;
state.result += common.repeat('\n', emptyLines + 1);
2021-01-08 20:47:49 +00:00
// Just one line break - perceive as the same line.
} else if (emptyLines === 0) {
if (didReadContent) { // i.e. only if we have already read some scalar content.
state.result += ' ';
}
2021-01-08 20:47:49 +00:00
// Several line breaks - perceive as different lines.
} else {
state.result += common.repeat('\n', emptyLines);
}
2021-01-08 20:47:49 +00:00
// Literal style: just add exact number of line breaks between content lines.
} else {
// Keep all line breaks except the header line break.
state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines);
}
2021-01-08 20:47:49 +00:00
didReadContent = true;
detectedIndent = true;
emptyLines = 0;
captureStart = state.position;
2021-01-08 20:47:49 +00:00
while (!is_EOL(ch) && (ch !== 0)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
captureSegment(state, captureStart, state.position, false);
}
2021-01-08 20:47:49 +00:00
return true;
}
2021-01-08 20:47:49 +00:00
function readBlockSequence(state, nodeIndent) {
var _line,
_tag = state.tag,
_anchor = state.anchor,
_result = [],
following,
detected = false,
ch;
2021-01-08 20:47:49 +00:00
// there is a leading tab before this token, so it can't be a block sequence/mapping;
// it can still be flow sequence/mapping or a scalar
if (state.firstTabInLine !== -1) return false;
2021-01-08 20:47:49 +00:00
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
if (state.firstTabInLine !== -1) {
state.position = state.firstTabInLine;
throwError(state, 'tab characters must not be used in indentation');
}
2021-01-08 20:47:49 +00:00
if (ch !== 0x2D/* - */) {
break;
}
2021-01-08 20:47:49 +00:00
following = state.input.charCodeAt(state.position + 1);
2021-01-08 20:47:49 +00:00
if (!is_WS_OR_EOL(following)) {
break;
}
2021-01-08 20:47:49 +00:00
detected = true;
state.position++;
2021-01-08 20:47:49 +00:00
if (skipSeparationSpace(state, true, -1)) {
if (state.lineIndent <= nodeIndent) {
_result.push(null);
ch = state.input.charCodeAt(state.position);
continue;
}
}
2021-01-08 20:47:49 +00:00
_line = state.line;
composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
_result.push(state.result);
skipSeparationSpace(state, true, -1);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {
throwError(state, 'bad indentation of a sequence entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
}
2021-01-08 20:47:49 +00:00
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
state.kind = 'sequence';
state.result = _result;
return true;
}
return false;
2021-01-08 20:47:49 +00:00
}
function readBlockMapping(state, nodeIndent, flowIndent) {
var following,
allowCompact,
_line,
_keyLine,
_keyLineStart,
_keyPos,
_tag = state.tag,
_anchor = state.anchor,
_result = {},
overridableKeys = Object.create(null),
keyTag = null,
keyNode = null,
valueNode = null,
atExplicitKey = false,
detected = false,
ch;
2021-01-08 20:47:49 +00:00
// there is a leading tab before this token, so it can't be a block sequence/mapping;
// it can still be flow sequence/mapping or a scalar
if (state.firstTabInLine !== -1) return false;
2021-01-08 20:47:49 +00:00
if (state.anchor !== null) {
state.anchorMap[state.anchor] = _result;
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
if (!atExplicitKey && state.firstTabInLine !== -1) {
state.position = state.firstTabInLine;
throwError(state, 'tab characters must not be used in indentation');
}
2021-01-08 20:47:49 +00:00
following = state.input.charCodeAt(state.position + 1);
_line = state.line; // Save the current line.
2021-01-08 20:47:49 +00:00
//
// Explicit notation case. There are two separate blocks:
// first for the key (denoted by "?") and second for the value (denoted by ":")
//
if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {
2021-01-08 20:47:49 +00:00
if (ch === 0x3F/* ? */) {
if (atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
2021-01-08 20:47:49 +00:00
detected = true;
atExplicitKey = true;
allowCompact = true;
2021-01-08 20:47:49 +00:00
} else if (atExplicitKey) {
// i.e. 0x3A/* : */ === character after the explicit key.
atExplicitKey = false;
allowCompact = true;
2021-01-08 20:47:49 +00:00
} else {
throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');
}
2021-01-08 20:47:49 +00:00
state.position += 1;
ch = following;
2021-01-08 20:47:49 +00:00
//
// Implicit notation case. Flow-style node as the key first, then ":", and the value.
//
} else {
_keyLine = state.line;
_keyLineStart = state.lineStart;
_keyPos = state.position;
2021-01-08 20:47:49 +00:00
if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
// Neither implicit nor explicit notation.
// Reading is done. Go to the epilogue.
break;
}
2021-01-08 20:47:49 +00:00
if (state.line === _line) {
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (ch === 0x3A/* : */) {
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if (!is_WS_OR_EOL(ch)) {
throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');
}
2021-01-08 20:47:49 +00:00
if (atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
2021-01-08 20:47:49 +00:00
detected = true;
atExplicitKey = false;
allowCompact = false;
keyTag = state.tag;
keyNode = state.result;
2021-01-08 20:47:49 +00:00
} else if (detected) {
throwError(state, 'can not read an implicit mapping pair; a colon is missed');
2021-01-08 20:47:49 +00:00
} else {
state.tag = _tag;
state.anchor = _anchor;
return true; // Keep the result of `composeNode`.
}
2021-01-08 20:47:49 +00:00
} else if (detected) {
throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');
2021-01-08 20:47:49 +00:00
} else {
state.tag = _tag;
state.anchor = _anchor;
return true; // Keep the result of `composeNode`.
}
}
2021-01-08 20:47:49 +00:00
//
// Common reading code for both explicit and implicit notations.
//
if (state.line === _line || state.lineIndent > nodeIndent) {
if (atExplicitKey) {
_keyLine = state.line;
_keyLineStart = state.lineStart;
_keyPos = state.position;
}
2021-01-08 20:47:49 +00:00
if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
if (atExplicitKey) {
keyNode = state.result;
} else {
valueNode = state.result;
}
}
2021-01-08 20:47:49 +00:00
if (!atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
keyTag = keyNode = valueNode = null;
}
2021-01-08 20:47:49 +00:00
skipSeparationSpace(state, true, -1);
ch = state.input.charCodeAt(state.position);
}
2021-01-08 20:47:49 +00:00
if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {
throwError(state, 'bad indentation of a mapping entry');
} else if (state.lineIndent < nodeIndent) {
break;
}
}
2021-01-08 20:47:49 +00:00
//
// Epilogue.
//
2021-01-08 20:47:49 +00:00
// Special case: last mapping's node contains only the key in explicit notation.
if (atExplicitKey) {
storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
}
2021-01-08 20:47:49 +00:00
// Expose the resulting mapping.
if (detected) {
state.tag = _tag;
state.anchor = _anchor;
state.kind = 'mapping';
state.result = _result;
}
2021-01-08 20:47:49 +00:00
return detected;
}
2021-01-08 20:47:49 +00:00
function readTagProperty(state) {
var _position,
isVerbatim = false,
isNamed = false,
tagHandle,
tagName,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch !== 0x21/* ! */) return false;
2021-01-08 20:47:49 +00:00
if (state.tag !== null) {
throwError(state, 'duplication of a tag property');
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
if (ch === 0x3C/* < */) {
isVerbatim = true;
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
} else if (ch === 0x21/* ! */) {
isNamed = true;
tagHandle = '!!';
ch = state.input.charCodeAt(++state.position);
2021-01-08 20:47:49 +00:00
} else {
tagHandle = '!';
}
2021-01-08 20:47:49 +00:00
_position = state.position;
2021-01-08 20:47:49 +00:00
if (isVerbatim) {
do { ch = state.input.charCodeAt(++state.position); }
while (ch !== 0 && ch !== 0x3E/* > */);
2021-01-08 20:47:49 +00:00
if (state.position < state.length) {
tagName = state.input.slice(_position, state.position);
ch = state.input.charCodeAt(++state.position);
} else {
throwError(state, 'unexpected end of the stream within a verbatim tag');
}
} else {
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
2021-01-08 20:47:49 +00:00
if (ch === 0x21/* ! */) {
if (!isNamed) {
tagHandle = state.input.slice(_position - 1, state.position + 1);
2021-01-08 20:47:49 +00:00
if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
throwError(state, 'named tag handle cannot contain such characters');
}
2021-01-08 20:47:49 +00:00
isNamed = true;
_position = state.position + 1;
} else {
throwError(state, 'tag suffix cannot contain exclamation marks');
}
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
tagName = state.input.slice(_position, state.position);
2021-01-08 20:47:49 +00:00
if (PATTERN_FLOW_INDICATORS.test(tagName)) {
throwError(state, 'tag suffix cannot contain flow indicator characters');
}
}
2021-01-08 20:47:49 +00:00
if (tagName && !PATTERN_TAG_URI.test(tagName)) {
throwError(state, 'tag name cannot contain such characters: ' + tagName);
}
2021-01-08 20:47:49 +00:00
try {
tagName = decodeURIComponent(tagName);
} catch (err) {
throwError(state, 'tag name is malformed: ' + tagName);
}
2021-01-08 20:47:49 +00:00
if (isVerbatim) {
state.tag = tagName;
2021-01-08 20:47:49 +00:00
} else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {
state.tag = state.tagMap[tagHandle] + tagName;
2021-01-08 20:47:49 +00:00
} else if (tagHandle === '!') {
state.tag = '!' + tagName;
2021-01-08 20:47:49 +00:00
} else if (tagHandle === '!!') {
state.tag = 'tag:yaml.org,2002:' + tagName;
2021-01-08 20:47:49 +00:00
} else {
throwError(state, 'undeclared tag handle "' + tagHandle + '"');
}
return true;
2021-01-08 20:47:49 +00:00
}
function readAnchorProperty(state) {
var _position,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch !== 0x26/* & */) return false;
if (state.anchor !== null) {
throwError(state, 'duplication of an anchor property');
}
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(++state.position);
_position = state.position;
2021-01-08 20:47:49 +00:00
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (state.position === _position) {
throwError(state, 'name of an anchor node must contain at least one character');
}
2021-01-08 20:47:49 +00:00
state.anchor = state.input.slice(_position, state.position);
return true;
2021-01-08 20:47:49 +00:00
}
function readAlias(state) {
var _position, alias,
ch;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (ch !== 0x2A/* * */) return false;
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(++state.position);
_position = state.position;
2021-01-08 20:47:49 +00:00
while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (state.position === _position) {
throwError(state, 'name of an alias node must contain at least one character');
}
2021-01-08 20:47:49 +00:00
alias = state.input.slice(_position, state.position);
if (!_hasOwnProperty.call(state.anchorMap, alias)) {
throwError(state, 'unidentified alias "' + alias + '"');
}
state.result = state.anchorMap[alias];
skipSeparationSpace(state, true, -1);
return true;
2021-01-08 20:47:49 +00:00
}
function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
var allowBlockStyles,
allowBlockScalars,
allowBlockCollections,
indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent
atNewLine = false,
hasContent = false,
typeIndex,
typeQuantity,
typeList,
type,
flowIndent,
blockIndent;
2021-01-08 20:47:49 +00:00
if (state.listener !== null) {
state.listener('open', state);
}
2021-01-08 20:47:49 +00:00
state.tag = null;
state.anchor = null;
state.kind = null;
state.result = null;
2021-01-08 20:47:49 +00:00
allowBlockStyles = allowBlockScalars = allowBlockCollections =
CONTEXT_BLOCK_OUT === nodeContext ||
CONTEXT_BLOCK_IN === nodeContext;
2021-01-08 20:47:49 +00:00
if (allowToSeek) {
if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
2021-01-08 20:47:49 +00:00
if (state.lineIndent > parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
indentStatus = 0;
} else if (state.lineIndent < parentIndent) {
indentStatus = -1;
}
}
}
2021-01-08 20:47:49 +00:00
if (indentStatus === 1) {
while (readTagProperty(state) || readAnchorProperty(state)) {
if (skipSeparationSpace(state, true, -1)) {
atNewLine = true;
allowBlockCollections = allowBlockStyles;
if (state.lineIndent > parentIndent) {
indentStatus = 1;
} else if (state.lineIndent === parentIndent) {
indentStatus = 0;
} else if (state.lineIndent < parentIndent) {
indentStatus = -1;
}
} else {
allowBlockCollections = false;
}
}
}
2021-01-08 20:47:49 +00:00
if (allowBlockCollections) {
allowBlockCollections = atNewLine || allowCompact;
}
2021-01-08 20:47:49 +00:00
if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
flowIndent = parentIndent;
} else {
flowIndent = parentIndent + 1;
}
2021-01-08 20:47:49 +00:00
blockIndent = state.position - state.lineStart;
2021-01-08 20:47:49 +00:00
if (indentStatus === 1) {
if (allowBlockCollections &&
(readBlockSequence(state, blockIndent) ||
readBlockMapping(state, blockIndent, flowIndent)) ||
readFlowCollection(state, flowIndent)) {
hasContent = true;
} else {
if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||
readSingleQuotedScalar(state, flowIndent) ||
readDoubleQuotedScalar(state, flowIndent)) {
hasContent = true;
2021-01-08 20:47:49 +00:00
} else if (readAlias(state)) {
hasContent = true;
2021-01-08 20:47:49 +00:00
if (state.tag !== null || state.anchor !== null) {
throwError(state, 'alias node should not have any properties');
}
2021-01-08 20:47:49 +00:00
} else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
hasContent = true;
2021-01-08 20:47:49 +00:00
if (state.tag === null) {
state.tag = '?';
}
}
2021-01-08 20:47:49 +00:00
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
}
} else if (indentStatus === 0) {
// Special case: block sequences are allowed to have same indentation level as the parent.
// http://www.yaml.org/spec/1.2/spec.html#id2799784
hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
}
}
2021-01-08 20:47:49 +00:00
if (state.tag === null) {
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
2021-01-08 20:47:49 +00:00
} else if (state.tag === '?') {
// Implicit resolving is not allowed for non-scalar types, and '?'
// non-specific tag is only automatically assigned to plain scalars.
//
// We only need to check kind conformity in case user explicitly assigns '?'
// tag, for example like this: "!<?> [0]"
//
if (state.result !== null && state.kind !== 'scalar') {
throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"');
}
2021-01-08 20:47:49 +00:00
for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
type = state.implicitTypes[typeIndex];
2021-01-08 20:47:49 +00:00
if (type.resolve(state.result)) { // `state.result` updated in resolver if matched
state.result = type.construct(state.result);
state.tag = type.tag;
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
break;
}
}
} else if (state.tag !== '!') {
if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {
type = state.typeMap[state.kind || 'fallback'][state.tag];
} else {
// looking for multi type
type = null;
typeList = state.typeMap.multi[state.kind || 'fallback'];
2021-01-08 20:47:49 +00:00
for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {
if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
type = typeList[typeIndex];
break;
}
}
}
2021-01-08 20:47:49 +00:00
if (!type) {
throwError(state, 'unknown tag !<' + state.tag + '>');
}
2021-01-08 20:47:49 +00:00
if (state.result !== null && type.kind !== state.kind) {
throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"');
}
2021-01-08 20:47:49 +00:00
if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched
throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');
} else {
state.result = type.construct(state.result, state.tag);
if (state.anchor !== null) {
state.anchorMap[state.anchor] = state.result;
}
}
}
if (state.listener !== null) {
state.listener('close', state);
}
return state.tag !== null || state.anchor !== null || hasContent;
}
function readDocument(state) {
var documentStart = state.position,
_position,
directiveName,
directiveArgs,
hasDirectives = false,
ch;
2021-01-08 20:47:49 +00:00
state.version = null;
state.checkLineBreaks = state.legacy;
state.tagMap = Object.create(null);
state.anchorMap = Object.create(null);
2021-01-08 20:47:49 +00:00
while ((ch = state.input.charCodeAt(state.position)) !== 0) {
skipSeparationSpace(state, true, -1);
2021-01-08 20:47:49 +00:00
ch = state.input.charCodeAt(state.position);
2021-01-08 20:47:49 +00:00
if (state.lineIndent > 0 || ch !== 0x25/* % */) {
break;
}
2021-01-08 20:47:49 +00:00
hasDirectives = true;
ch = state.input.charCodeAt(++state.position);
_position = state.position;
2021-01-08 20:47:49 +00:00
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
directiveName = state.input.slice(_position, state.position);
directiveArgs = [];
2021-01-08 20:47:49 +00:00
if (directiveName.length < 1) {
throwError(state, 'directive name must not be less than one character in length');
}
2021-01-08 20:47:49 +00:00
while (ch !== 0) {
while (is_WHITE_SPACE(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
if (ch === 0x23/* # */) {
do { ch = state.input.charCodeAt(++state.position); }
while (ch !== 0 && !is_EOL(ch));
break;
}
2021-01-08 20:47:49 +00:00
if (is_EOL(ch)) break;
2021-01-08 20:47:49 +00:00
_position = state.position;
2021-01-08 20:47:49 +00:00
while (ch !== 0 && !is_WS_OR_EOL(ch)) {
ch = state.input.charCodeAt(++state.position);
}
2021-01-08 20:47:49 +00:00
directiveArgs.push(state.input.slice(_position, state.position));
}
2021-01-08 20:47:49 +00:00
if (ch !== 0) readLineBreak(state);
2021-01-08 20:47:49 +00:00
if (_hasOwnProperty.call(directiveHandlers, directiveName)) {
directiveHandlers[directiveName](state, directiveName, directiveArgs);
} else {
throwWarning(state, 'unknown document directive "' + directiveName + '"');
}
}
2021-01-08 20:47:49 +00:00
skipSeparationSpace(state, true, -1);
2021-01-08 20:47:49 +00:00
if (state.lineIndent === 0 &&
state.input.charCodeAt(state.position) === 0x2D/* - */ &&
state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&
state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {
state.position += 3;
skipSeparationSpace(state, true, -1);
2021-01-08 20:47:49 +00:00
} else if (hasDirectives) {
throwError(state, 'directives end mark is expected');
}
2021-01-08 20:47:49 +00:00
composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
skipSeparationSpace(state, true, -1);
2021-01-08 20:47:49 +00:00
if (state.checkLineBreaks &&
PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
throwWarning(state, 'non-ASCII line breaks are interpreted as content');
}
2021-01-08 20:47:49 +00:00
state.documents.push(state.result);
2021-01-08 20:47:49 +00:00
if (state.position === state.lineStart && testDocumentSeparator(state)) {
2021-01-08 20:47:49 +00:00
if (state.input.charCodeAt(state.position) === 0x2E/* . */) {
state.position += 3;
skipSeparationSpace(state, true, -1);
}
return;
}
2021-01-08 20:47:49 +00:00
if (state.position < (state.length - 1)) {
throwError(state, 'end of the stream or a document separator is expected');
} else {
return;
}
}
2021-01-08 20:47:49 +00:00
function loadDocuments(input, options) {
input = String(input);
options = options || {};
2021-01-08 20:47:49 +00:00
if (input.length !== 0) {
2021-01-08 20:47:49 +00:00
// Add tailing `\n` if not exists
if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&
input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {
input += '\n';
}
2021-01-08 20:47:49 +00:00
// Strip BOM
if (input.charCodeAt(0) === 0xFEFF) {
input = input.slice(1);
}
}
2021-01-08 20:47:49 +00:00
var state = new State(input, options);
2021-01-08 20:47:49 +00:00
var nullpos = input.indexOf('\0');
2021-01-08 20:47:49 +00:00
if (nullpos !== -1) {
state.position = nullpos;
throwError(state, 'null byte is not allowed in input');
}
2021-01-08 20:47:49 +00:00
// Use 0 as string terminator. That significantly simplifies bounds check.
state.input += '\0';
2021-01-08 20:47:49 +00:00
while (state.input.charCodeAt(state.position) === 0x20/* Space */) {
state.lineIndent += 1;
state.position += 1;
}
2021-01-08 20:47:49 +00:00
while (state.position < (state.length - 1)) {
readDocument(state);
}
2021-01-08 20:47:49 +00:00
return state.documents;
}
2021-01-08 20:47:49 +00:00
function loadAll(input, iterator, options) {
if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {
options = iterator;
iterator = null;
}
2021-01-08 20:47:49 +00:00
var documents = loadDocuments(input, options);
2021-01-08 20:47:49 +00:00
if (typeof iterator !== 'function') {
return documents;
}
for (var index = 0, length = documents.length; index < length; index += 1) {
iterator(documents[index]);
}
2021-01-08 20:47:49 +00:00
}
function load(input, options) {
var documents = loadDocuments(input, options);
2021-01-08 20:47:49 +00:00
if (documents.length === 0) {
/*eslint-disable no-undefined*/
return undefined;
} else if (documents.length === 1) {
return documents[0];
}
throw new YAMLException('expected a single document in the stream, but found more');
}
2021-01-08 20:47:49 +00:00
module.exports.loadAll = loadAll;
module.exports.load = load;
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1082:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
/*eslint-disable max-len*/
2021-01-08 20:47:49 +00:00
var YAMLException = __nccwpck_require__(8179);
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
function compileList(schema, name) {
var result = [];
2021-01-08 20:47:49 +00:00
schema[name].forEach(function (currentType) {
var newIndex = result.length;
2021-01-08 20:47:49 +00:00
result.forEach(function (previousType, previousIndex) {
if (previousType.tag === currentType.tag &&
previousType.kind === currentType.kind &&
previousType.multi === currentType.multi) {
2021-01-08 20:47:49 +00:00
newIndex = previousIndex;
}
});
2021-01-08 20:47:49 +00:00
result[newIndex] = currentType;
});
2021-01-08 20:47:49 +00:00
return result;
2021-01-08 20:47:49 +00:00
}
function compileMap(/* lists... */) {
var result = {
scalar: {},
sequence: {},
mapping: {},
fallback: {},
multi: {
scalar: [],
sequence: [],
mapping: [],
fallback: []
}
}, index, length;
2021-01-08 20:47:49 +00:00
function collectType(type) {
if (type.multi) {
result.multi[type.kind].push(type);
result.multi['fallback'].push(type);
} else {
result[type.kind][type.tag] = result['fallback'][type.tag] = type;
}
}
2021-01-08 20:47:49 +00:00
for (index = 0, length = arguments.length; index < length; index += 1) {
arguments[index].forEach(collectType);
}
return result;
}
2021-01-08 20:47:49 +00:00
function Schema(definition) {
return this.extend(definition);
}
2021-01-08 20:47:49 +00:00
Schema.prototype.extend = function extend(definition) {
var implicit = [];
var explicit = [];
2021-01-08 20:47:49 +00:00
if (definition instanceof Type) {
// Schema.extend(type)
explicit.push(definition);
2021-01-08 20:47:49 +00:00
} else if (Array.isArray(definition)) {
// Schema.extend([ type1, type2, ... ])
explicit = explicit.concat(definition);
2021-01-08 20:47:49 +00:00
} else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
// Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })
if (definition.implicit) implicit = implicit.concat(definition.implicit);
if (definition.explicit) explicit = explicit.concat(definition.explicit);
2021-01-08 20:47:49 +00:00
} else {
throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' +
'or a schema definition ({ implicit: [...], explicit: [...] })');
}
2021-01-08 20:47:49 +00:00
implicit.forEach(function (type) {
if (!(type instanceof Type)) {
throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');
}
2021-01-08 20:47:49 +00:00
if (type.loadKind && type.loadKind !== 'scalar') {
throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');
}
2021-01-08 20:47:49 +00:00
if (type.multi) {
throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');
}
});
2021-01-08 20:47:49 +00:00
explicit.forEach(function (type) {
if (!(type instanceof Type)) {
throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');
}
});
2021-01-08 20:47:49 +00:00
var result = Object.create(Schema.prototype);
2021-01-08 20:47:49 +00:00
result.implicit = (this.implicit || []).concat(implicit);
result.explicit = (this.explicit || []).concat(explicit);
2021-01-08 20:47:49 +00:00
result.compiledImplicit = compileList(result, 'implicit');
result.compiledExplicit = compileList(result, 'explicit');
result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
2021-01-08 20:47:49 +00:00
return result;
};
2021-01-08 20:47:49 +00:00
module.exports = Schema;
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 2011:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
// Standard YAML's Core schema.
// http://www.yaml.org/spec/1.2/spec.html#id2804923
//
// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.
// So, Core schema has no distinctions from JSON schema is JS-YAML.
2021-01-08 20:47:49 +00:00
module.exports = __nccwpck_require__(1035);
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8759:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
// JS-YAML's default schema for `safeLoad` function.
// It is not described in the YAML specification.
//
// This schema is based on standard YAML's Core schema and includes most of
// extra types described at YAML tag repository. (http://yaml.org/type/)
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
module.exports = (__nccwpck_require__(2011).extend)({
implicit: [
__nccwpck_require__(9212),
__nccwpck_require__(6104)
],
explicit: [
__nccwpck_require__(7900),
__nccwpck_require__(9046),
__nccwpck_require__(6860),
__nccwpck_require__(9548)
]
});
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 8562:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
// Standard YAML's Failsafe schema.
// http://www.yaml.org/spec/1.2/spec.html#id2802346
2021-01-08 20:47:49 +00:00
var Schema = __nccwpck_require__(1082);
2021-01-08 20:47:49 +00:00
module.exports = new Schema({
explicit: [
__nccwpck_require__(3619),
__nccwpck_require__(7283),
__nccwpck_require__(6150)
]
});
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1035:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
// Standard YAML's JSON schema.
// http://www.yaml.org/spec/1.2/spec.html#id2803231
//
// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.
// So, this schema is not such strict as defined in the YAML specification.
// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.
2021-01-08 20:47:49 +00:00
2021-12-19 20:39:50 +00:00
module.exports = (__nccwpck_require__(8562).extend)({
implicit: [
__nccwpck_require__(721),
__nccwpck_require__(4993),
__nccwpck_require__(1615),
__nccwpck_require__(2705)
]
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 6975:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
2021-01-08 20:47:49 +00:00
var common = __nccwpck_require__(6829);
2021-01-08 20:47:49 +00:00
// get snippet for a single line, respecting maxLength
function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
var head = '';
var tail = '';
var maxHalfLength = Math.floor(maxLineLength / 2) - 1;
2021-01-08 20:47:49 +00:00
if (position - lineStart > maxHalfLength) {
head = ' ... ';
lineStart = position - maxHalfLength + head.length;
}
2021-01-08 20:47:49 +00:00
if (lineEnd - position > maxHalfLength) {
tail = ' ...';
lineEnd = position + maxHalfLength - tail.length;
2021-01-08 20:47:49 +00:00
}
return {
str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail,
pos: position - lineStart + head.length // relative position
};
}
function padStart(string, max) {
return common.repeat(' ', max - string.length) + string;
2021-01-08 20:47:49 +00:00
}
function makeSnippet(mark, options) {
options = Object.create(options || null);
2021-01-08 20:47:49 +00:00
if (!mark.buffer) return null;
2021-01-08 20:47:49 +00:00
if (!options.maxLength) options.maxLength = 79;
if (typeof options.indent !== 'number') options.indent = 1;
if (typeof options.linesBefore !== 'number') options.linesBefore = 3;
if (typeof options.linesAfter !== 'number') options.linesAfter = 2;
2021-01-08 20:47:49 +00:00
var re = /\r?\n|\r|\0/g;
var lineStarts = [ 0 ];
var lineEnds = [];
var match;
var foundLineNo = -1;
2021-01-08 20:47:49 +00:00
while ((match = re.exec(mark.buffer))) {
lineEnds.push(match.index);
lineStarts.push(match.index + match[0].length);
2021-01-08 20:47:49 +00:00
if (mark.position <= match.index && foundLineNo < 0) {
foundLineNo = lineStarts.length - 2;
}
}
2021-01-08 20:47:49 +00:00
if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;
2021-01-08 20:47:49 +00:00
var result = '', i, line;
var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;
var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);
for (i = 1; i <= options.linesBefore; i++) {
if (foundLineNo - i < 0) break;
line = getLine(
mark.buffer,
lineStarts[foundLineNo - i],
lineEnds[foundLineNo - i],
mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),
maxLineLength
);
result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +
' | ' + line.str + '\n' + result;
}
line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);
result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +
' | ' + line.str + '\n';
result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n';
for (i = 1; i <= options.linesAfter; i++) {
if (foundLineNo + i >= lineEnds.length) break;
line = getLine(
mark.buffer,
lineStarts[foundLineNo + i],
lineEnds[foundLineNo + i],
mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),
maxLineLength
);
result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +
' | ' + line.str + '\n';
}
2021-01-08 20:47:49 +00:00
return result.replace(/\n$/, '');
}
2021-01-08 20:47:49 +00:00
module.exports = makeSnippet;
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 6073:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
2021-01-08 20:47:49 +00:00
var YAMLException = __nccwpck_require__(8179);
2021-01-08 20:47:49 +00:00
var TYPE_CONSTRUCTOR_OPTIONS = [
'kind',
'multi',
'resolve',
'construct',
'instanceOf',
'predicate',
'represent',
'representName',
'defaultStyle',
'styleAliases'
];
2021-01-08 20:47:49 +00:00
var YAML_NODE_KINDS = [
'scalar',
'sequence',
'mapping'
];
2021-01-08 20:47:49 +00:00
function compileStyleAliases(map) {
var result = {};
2021-01-08 20:47:49 +00:00
if (map !== null) {
Object.keys(map).forEach(function (style) {
map[style].forEach(function (alias) {
result[String(alias)] = style;
});
});
}
2021-01-08 20:47:49 +00:00
return result;
2021-01-08 20:47:49 +00:00
}
function Type(tag, options) {
options = options || {};
2021-01-08 20:47:49 +00:00
Object.keys(options).forEach(function (name) {
if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
}
});
2021-01-08 20:47:49 +00:00
// TODO: Add tag format check.
this.options = options; // keep original options in case user wants to extend this type later
this.tag = tag;
this.kind = options['kind'] || null;
this.resolve = options['resolve'] || function () { return true; };
this.construct = options['construct'] || function (data) { return data; };
this.instanceOf = options['instanceOf'] || null;
this.predicate = options['predicate'] || null;
this.represent = options['represent'] || null;
this.representName = options['representName'] || null;
this.defaultStyle = options['defaultStyle'] || null;
this.multi = options['multi'] || false;
this.styleAliases = compileStyleAliases(options['styleAliases'] || null);
2021-01-08 20:47:49 +00:00
if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
2021-01-08 20:47:49 +00:00
}
}
module.exports = Type;
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 7900:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
2021-01-08 20:47:49 +00:00
/*eslint-disable no-bitwise*/
2021-01-08 20:47:49 +00:00
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
// [ 64, 65, 66 ] -> [ padding, CR, LF ]
var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r';
2021-01-08 20:47:49 +00:00
function resolveYamlBinary(data) {
if (data === null) return false;
2021-01-08 20:47:49 +00:00
var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;
2021-01-08 20:47:49 +00:00
// Convert one by one.
for (idx = 0; idx < max; idx++) {
code = map.indexOf(data.charAt(idx));
2021-01-08 20:47:49 +00:00
// Skip CR/LF
if (code > 64) continue;
2021-01-08 20:47:49 +00:00
// Fail on illegal characters
if (code < 0) return false;
2021-01-08 20:47:49 +00:00
bitlen += 6;
}
2021-01-08 20:47:49 +00:00
// If there are any bits left, source was corrupted
return (bitlen % 8) === 0;
2021-01-08 20:47:49 +00:00
}
function constructYamlBinary(data) {
var idx, tailbits,
input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan
max = input.length,
map = BASE64_MAP,
bits = 0,
result = [];
2021-01-08 20:47:49 +00:00
// Collect by 6*4 bits (3 bytes)
2021-01-08 20:47:49 +00:00
for (idx = 0; idx < max; idx++) {
if ((idx % 4 === 0) && idx) {
result.push((bits >> 16) & 0xFF);
result.push((bits >> 8) & 0xFF);
result.push(bits & 0xFF);
}
2021-01-08 20:47:49 +00:00
bits = (bits << 6) | map.indexOf(input.charAt(idx));
}
2021-01-08 20:47:49 +00:00
// Dump tail
2021-01-08 20:47:49 +00:00
tailbits = (max % 4) * 6;
2021-01-08 20:47:49 +00:00
if (tailbits === 0) {
result.push((bits >> 16) & 0xFF);
result.push((bits >> 8) & 0xFF);
result.push(bits & 0xFF);
} else if (tailbits === 18) {
result.push((bits >> 10) & 0xFF);
result.push((bits >> 2) & 0xFF);
} else if (tailbits === 12) {
result.push((bits >> 4) & 0xFF);
}
2021-01-08 20:47:49 +00:00
return new Uint8Array(result);
}
2021-01-08 20:47:49 +00:00
function representYamlBinary(object /*, style*/) {
var result = '', bits = 0, idx, tail,
max = object.length,
map = BASE64_MAP;
2021-01-08 20:47:49 +00:00
// Convert every three bytes to 4 ASCII characters.
2021-01-08 20:47:49 +00:00
for (idx = 0; idx < max; idx++) {
if ((idx % 3 === 0) && idx) {
result += map[(bits >> 18) & 0x3F];
result += map[(bits >> 12) & 0x3F];
result += map[(bits >> 6) & 0x3F];
result += map[bits & 0x3F];
}
2021-01-08 20:47:49 +00:00
bits = (bits << 8) + object[idx];
}
2021-01-08 20:47:49 +00:00
// Dump tail
2021-01-08 20:47:49 +00:00
tail = max % 3;
2021-01-08 20:47:49 +00:00
if (tail === 0) {
result += map[(bits >> 18) & 0x3F];
result += map[(bits >> 12) & 0x3F];
result += map[(bits >> 6) & 0x3F];
result += map[bits & 0x3F];
} else if (tail === 2) {
result += map[(bits >> 10) & 0x3F];
result += map[(bits >> 4) & 0x3F];
result += map[(bits << 2) & 0x3F];
result += map[64];
} else if (tail === 1) {
result += map[(bits >> 2) & 0x3F];
result += map[(bits << 4) & 0x3F];
result += map[64];
result += map[64];
}
2021-01-08 20:47:49 +00:00
return result;
}
2021-01-08 20:47:49 +00:00
function isBinary(obj) {
return Object.prototype.toString.call(obj) === '[object Uint8Array]';
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:binary', {
kind: 'scalar',
resolve: resolveYamlBinary,
construct: constructYamlBinary,
predicate: isBinary,
represent: representYamlBinary
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 4993:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
2021-01-08 20:47:49 +00:00
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
function resolveYamlBoolean(data) {
if (data === null) return false;
var max = data.length;
return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||
(max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));
2021-01-08 20:47:49 +00:00
}
function constructYamlBoolean(data) {
return data === 'true' ||
data === 'True' ||
data === 'TRUE';
}
function isBoolean(object) {
return Object.prototype.toString.call(object) === '[object Boolean]';
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:bool', {
kind: 'scalar',
resolve: resolveYamlBoolean,
construct: constructYamlBoolean,
predicate: isBoolean,
represent: {
lowercase: function (object) { return object ? 'true' : 'false'; },
uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },
camelcase: function (object) { return object ? 'True' : 'False'; }
},
defaultStyle: 'lowercase'
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 2705:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var common = __nccwpck_require__(6829);
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
var YAML_FLOAT_PATTERN = new RegExp(
// 2.5e4, 2.5 and integers
'^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +
// .2e4, .2
// special case, seems not from spec
'|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +
// .inf
'|[-+]?\\.(?:inf|Inf|INF)' +
// .nan
'|\\.(?:nan|NaN|NAN))$');
2021-01-08 20:47:49 +00:00
function resolveYamlFloat(data) {
if (data === null) return false;
2021-01-08 20:47:49 +00:00
if (!YAML_FLOAT_PATTERN.test(data) ||
// Quick hack to not allow integers end with `_`
// Probably should update regexp & check speed
data[data.length - 1] === '_') {
return false;
}
2021-01-08 20:47:49 +00:00
return true;
}
2021-01-08 20:47:49 +00:00
function constructYamlFloat(data) {
var value, sign;
2021-01-08 20:47:49 +00:00
value = data.replace(/_/g, '').toLowerCase();
sign = value[0] === '-' ? -1 : 1;
2021-01-08 20:47:49 +00:00
if ('+-'.indexOf(value[0]) >= 0) {
value = value.slice(1);
}
2021-01-08 20:47:49 +00:00
if (value === '.inf') {
return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
2021-01-08 20:47:49 +00:00
} else if (value === '.nan') {
return NaN;
}
return sign * parseFloat(value, 10);
}
2021-01-08 20:47:49 +00:00
var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
2021-01-08 20:47:49 +00:00
function representYamlFloat(object, style) {
var res;
2021-01-08 20:47:49 +00:00
if (isNaN(object)) {
switch (style) {
case 'lowercase': return '.nan';
case 'uppercase': return '.NAN';
case 'camelcase': return '.NaN';
}
} else if (Number.POSITIVE_INFINITY === object) {
switch (style) {
case 'lowercase': return '.inf';
case 'uppercase': return '.INF';
case 'camelcase': return '.Inf';
}
} else if (Number.NEGATIVE_INFINITY === object) {
switch (style) {
case 'lowercase': return '-.inf';
case 'uppercase': return '-.INF';
case 'camelcase': return '-.Inf';
}
} else if (common.isNegativeZero(object)) {
return '-0.0';
}
2021-01-08 20:47:49 +00:00
res = object.toString(10);
2021-01-08 20:47:49 +00:00
// JS stringifier can build scientific format without dots: 5e-100,
// while YAML requres dot: 5.e-100. Fix it with simple hack
2021-01-08 20:47:49 +00:00
return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;
2021-01-08 20:47:49 +00:00
}
function isFloat(object) {
return (Object.prototype.toString.call(object) === '[object Number]') &&
(object % 1 !== 0 || common.isNegativeZero(object));
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:float', {
kind: 'scalar',
resolve: resolveYamlFloat,
construct: constructYamlFloat,
predicate: isFloat,
represent: representYamlFloat,
defaultStyle: 'lowercase'
});
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 1615:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
var common = __nccwpck_require__(6829);
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
function isHexCode(c) {
return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||
((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||
((0x61/* a */ <= c) && (c <= 0x66/* f */));
2021-01-08 20:47:49 +00:00
}
function isOctCode(c) {
return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));
2021-01-08 20:47:49 +00:00
}
function isDecCode(c) {
return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));
2021-01-08 20:47:49 +00:00
}
function resolveYamlInteger(data) {
if (data === null) return false;
2021-01-08 20:47:49 +00:00
var max = data.length,
index = 0,
hasDigits = false,
ch;
2021-01-08 20:47:49 +00:00
if (!max) return false;
2021-01-08 20:47:49 +00:00
ch = data[index];
2021-01-08 20:47:49 +00:00
// sign
if (ch === '-' || ch === '+') {
ch = data[++index];
}
2021-01-08 20:47:49 +00:00
if (ch === '0') {
// 0
if (index + 1 === max) return true;
ch = data[++index];
2021-01-08 20:47:49 +00:00
// base 2, base 8, base 16
2021-01-08 20:47:49 +00:00
if (ch === 'b') {
// base 2
index++;
2021-01-08 20:47:49 +00:00
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (ch !== '0' && ch !== '1') return false;
hasDigits = true;
}
return hasDigits && ch !== '_';
}
2021-01-08 20:47:49 +00:00
if (ch === 'x') {
// base 16
index++;
2021-01-08 20:47:49 +00:00
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isHexCode(data.charCodeAt(index))) return false;
hasDigits = true;
}
return hasDigits && ch !== '_';
2021-01-08 20:47:49 +00:00
}
if (ch === 'o') {
// base 8
index++;
2021-01-08 20:47:49 +00:00
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isOctCode(data.charCodeAt(index))) return false;
hasDigits = true;
2021-01-08 20:47:49 +00:00
}
return hasDigits && ch !== '_';
2021-01-08 20:47:49 +00:00
}
}
// base 10 (except 0)
2021-01-08 20:47:49 +00:00
// value should not start with `_`;
if (ch === '_') return false;
2021-01-08 20:47:49 +00:00
for (; index < max; index++) {
ch = data[index];
if (ch === '_') continue;
if (!isDecCode(data.charCodeAt(index))) {
return false;
}
hasDigits = true;
2021-01-08 20:47:49 +00:00
}
// Should have digits and should not end with `_`
if (!hasDigits || ch === '_') return false;
2021-01-08 20:47:49 +00:00
return true;
2021-01-08 20:47:49 +00:00
}
function constructYamlInteger(data) {
var value = data, sign = 1, ch;
2021-01-08 20:47:49 +00:00
if (value.indexOf('_') !== -1) {
value = value.replace(/_/g, '');
2021-01-08 20:47:49 +00:00
}
ch = value[0];
2021-01-08 20:47:49 +00:00
if (ch === '-' || ch === '+') {
if (ch === '-') sign = -1;
value = value.slice(1);
ch = value[0];
}
2021-01-08 20:47:49 +00:00
if (value === '0') return 0;
2021-01-08 20:47:49 +00:00
if (ch === '0') {
if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);
if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);
if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);
}
return sign * parseInt(value, 10);
2021-01-08 20:47:49 +00:00
}
function isInteger(object) {
return (Object.prototype.toString.call(object)) === '[object Number]' &&
(object % 1 === 0 && !common.isNegativeZero(object));
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:int', {
kind: 'scalar',
resolve: resolveYamlInteger,
construct: constructYamlInteger,
predicate: isInteger,
represent: {
binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },
octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },
decimal: function (obj) { return obj.toString(10); },
/* eslint-disable max-len */
hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }
},
defaultStyle: 'decimal',
styleAliases: {
binary: [ 2, 'bin' ],
octal: [ 8, 'oct' ],
decimal: [ 10, 'dec' ],
hexadecimal: [ 16, 'hex' ]
}
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 6150:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
module.exports = new Type('tag:yaml.org,2002:map', {
kind: 'mapping',
construct: function (data) { return data !== null ? data : {}; }
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 6104:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
function resolveYamlMerge(data) {
return data === '<<' || data === null;
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:merge', {
kind: 'scalar',
resolve: resolveYamlMerge
});
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 721:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
function resolveYamlNull(data) {
if (data === null) return true;
2021-01-08 20:47:49 +00:00
var max = data.length;
2021-01-08 20:47:49 +00:00
return (max === 1 && data === '~') ||
(max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));
}
2021-01-08 20:47:49 +00:00
function constructYamlNull() {
return null;
}
2021-01-08 20:47:49 +00:00
function isNull(object) {
return object === null;
}
2021-01-08 20:47:49 +00:00
module.exports = new Type('tag:yaml.org,2002:null', {
kind: 'scalar',
resolve: resolveYamlNull,
construct: constructYamlNull,
predicate: isNull,
represent: {
canonical: function () { return '~'; },
lowercase: function () { return 'null'; },
uppercase: function () { return 'NULL'; },
camelcase: function () { return 'Null'; },
empty: function () { return ''; }
},
defaultStyle: 'lowercase'
});
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
/***/ 9046:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var _toString = Object.prototype.toString;
2021-01-08 20:47:49 +00:00
function resolveYamlOmap(data) {
if (data === null) return true;
2021-01-08 20:47:49 +00:00
var objectKeys = [], index, length, pair, pairKey, pairHasKey,
object = data;
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
pairHasKey = false;
if (_toString.call(pair) !== '[object Object]') return false;
for (pairKey in pair) {
if (_hasOwnProperty.call(pair, pairKey)) {
if (!pairHasKey) pairHasKey = true;
else return false;
2021-01-08 20:47:49 +00:00
}
}
if (!pairHasKey) return false;
2021-01-08 20:47:49 +00:00
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);
else return false;
2021-01-08 20:47:49 +00:00
}
return true;
2021-01-08 20:47:49 +00:00
}
function constructYamlOmap(data) {
return data !== null ? data : [];
}
module.exports = new Type('tag:yaml.org,2002:omap', {
kind: 'sequence',
resolve: resolveYamlOmap,
construct: constructYamlOmap
});
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 6860:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
var _toString = Object.prototype.toString;
function resolveYamlPairs(data) {
if (data === null) return true;
var index, length, pair, keys, result,
object = data;
result = new Array(object.length);
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
if (_toString.call(pair) !== '[object Object]') return false;
keys = Object.keys(pair);
if (keys.length !== 1) return false;
result[index] = [ keys[0], pair[keys[0]] ];
2021-01-08 20:47:49 +00:00
}
return true;
}
function constructYamlPairs(data) {
if (data === null) return [];
var index, length, pair, keys, result,
object = data;
result = new Array(object.length);
for (index = 0, length = object.length; index < length; index += 1) {
pair = object[index];
keys = Object.keys(pair);
result[index] = [ keys[0], pair[keys[0]] ];
2021-01-08 20:47:49 +00:00
}
return result;
2021-01-08 20:47:49 +00:00
}
module.exports = new Type('tag:yaml.org,2002:pairs', {
kind: 'sequence',
resolve: resolveYamlPairs,
construct: constructYamlPairs
});
2021-01-08 20:47:49 +00:00
2021-04-16 13:23:55 +00:00
/***/ }),
/***/ 7283:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-04-16 13:23:55 +00:00
"use strict";
var Type = __nccwpck_require__(6073);
2021-04-16 13:23:55 +00:00
module.exports = new Type('tag:yaml.org,2002:seq', {
kind: 'sequence',
construct: function (data) { return data !== null ? data : []; }
});
2021-04-16 13:23:55 +00:00
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 9548:
2021-01-08 20:47:49 +00:00
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var Type = __nccwpck_require__(6073);
2021-01-08 20:47:49 +00:00
var _hasOwnProperty = Object.prototype.hasOwnProperty;
2021-01-08 20:47:49 +00:00
function resolveYamlSet(data) {
if (data === null) return true;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var key, object = data;
for (key in object) {
if (_hasOwnProperty.call(object, key)) {
if (object[key] !== null) return false;
}
}
return true;
}
function constructYamlSet(data) {
return data !== null ? data : {};
}
module.exports = new Type('tag:yaml.org,2002:set', {
kind: 'mapping',
resolve: resolveYamlSet,
construct: constructYamlSet
});
/***/ }),
/***/ 3619:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var Type = __nccwpck_require__(6073);
module.exports = new Type('tag:yaml.org,2002:str', {
kind: 'scalar',
construct: function (data) { return data !== null ? data : ''; }
});
/***/ }),
/***/ 9212:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var Type = __nccwpck_require__(6073);
var YAML_DATE_REGEXP = new RegExp(
'^([0-9][0-9][0-9][0-9])' + // [1] year
'-([0-9][0-9])' + // [2] month
'-([0-9][0-9])$'); // [3] day
var YAML_TIMESTAMP_REGEXP = new RegExp(
'^([0-9][0-9][0-9][0-9])' + // [1] year
'-([0-9][0-9]?)' + // [2] month
'-([0-9][0-9]?)' + // [3] day
'(?:[Tt]|[ \\t]+)' + // ...
'([0-9][0-9]?)' + // [4] hour
':([0-9][0-9])' + // [5] minute
':([0-9][0-9])' + // [6] second
'(?:\\.([0-9]*))?' + // [7] fraction
'(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour
'(?::([0-9][0-9]))?))?$'); // [11] tz_minute
function resolveYamlTimestamp(data) {
if (data === null) return false;
if (YAML_DATE_REGEXP.exec(data) !== null) return true;
if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;
return false;
}
function constructYamlTimestamp(data) {
var match, year, month, day, hour, minute, second, fraction = 0,
delta = null, tz_hour, tz_minute, date;
match = YAML_DATE_REGEXP.exec(data);
if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);
if (match === null) throw new Error('Date resolve error');
// match: [1] year [2] month [3] day
year = +(match[1]);
month = +(match[2]) - 1; // JS month starts with 0
day = +(match[3]);
if (!match[4]) { // no hour
return new Date(Date.UTC(year, month, day));
}
// match: [4] hour [5] minute [6] second [7] fraction
hour = +(match[4]);
minute = +(match[5]);
second = +(match[6]);
if (match[7]) {
fraction = match[7].slice(0, 3);
while (fraction.length < 3) { // milli-seconds
fraction += '0';
}
fraction = +fraction;
}
// match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute
if (match[9]) {
tz_hour = +(match[10]);
tz_minute = +(match[11] || 0);
delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds
if (match[9] === '-') delta = -delta;
}
date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
if (delta) date.setTime(date.getTime() - delta);
return date;
}
function representYamlTimestamp(object /*, style*/) {
return object.toISOString();
}
module.exports = new Type('tag:yaml.org,2002:timestamp', {
kind: 'scalar',
resolve: resolveYamlTimestamp,
construct: constructYamlTimestamp,
instanceOf: Date,
represent: representYamlTimestamp
});
/***/ }),
/***/ 6160:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
let _fs
try {
_fs = __nccwpck_require__(7758)
} catch (_) {
_fs = __nccwpck_require__(7147)
}
const universalify = __nccwpck_require__(1463)
const { stringify, stripBom } = __nccwpck_require__(5902)
async function _readFile (file, options = {}) {
if (typeof options === 'string') {
options = { encoding: options }
}
const fs = options.fs || _fs
const shouldThrow = 'throws' in options ? options.throws : true
let data = await universalify.fromCallback(fs.readFile)(file, options)
data = stripBom(data)
let obj
try {
obj = JSON.parse(data, options ? options.reviver : null)
} catch (err) {
if (shouldThrow) {
err.message = `${file}: ${err.message}`
throw err
} else {
return null
}
}
return obj
}
const readFile = universalify.fromPromise(_readFile)
function readFileSync (file, options = {}) {
if (typeof options === 'string') {
options = { encoding: options }
}
const fs = options.fs || _fs
const shouldThrow = 'throws' in options ? options.throws : true
try {
let content = fs.readFileSync(file, options)
content = stripBom(content)
return JSON.parse(content, options.reviver)
} catch (err) {
if (shouldThrow) {
err.message = `${file}: ${err.message}`
throw err
} else {
return null
}
}
}
async function _writeFile (file, obj, options = {}) {
const fs = options.fs || _fs
const str = stringify(obj, options)
await universalify.fromCallback(fs.writeFile)(file, str, options)
}
const writeFile = universalify.fromPromise(_writeFile)
function writeFileSync (file, obj, options = {}) {
const fs = options.fs || _fs
const str = stringify(obj, options)
// not sure if fs.writeFileSync returns anything, but just in case
return fs.writeFileSync(file, str, options)
}
const jsonfile = {
readFile,
readFileSync,
writeFile,
writeFileSync
}
module.exports = jsonfile
/***/ }),
/***/ 5902:
/***/ ((module) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function stringify (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
const EOF = finalEOL ? EOL : ''
const str = JSON.stringify(obj, replacer, spaces)
2022-03-21 00:47:21 +00:00
return str.replace(/\n/g, EOL) + EOF
}
2022-03-21 00:47:21 +00:00
function stripBom (content) {
// we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
if (Buffer.isBuffer(content)) content = content.toString('utf8')
return content.replace(/^\uFEFF/, '')
}
2022-03-21 00:47:21 +00:00
module.exports = { stringify, stripBom }
/***/ }),
2022-03-21 00:47:21 +00:00
/***/ 467:
/***/ ((module, exports, __nccwpck_require__) => {
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2022-03-21 00:47:21 +00:00
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var Stream = _interopDefault(__nccwpck_require__(2781));
var http = _interopDefault(__nccwpck_require__(3685));
var Url = _interopDefault(__nccwpck_require__(7310));
var https = _interopDefault(__nccwpck_require__(5687));
var zlib = _interopDefault(__nccwpck_require__(9796));
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// fix for "Readable" isn't a named export issue
const Readable = Stream.Readable;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const BUFFER = Symbol('buffer');
const TYPE = Symbol('type');
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
class Blob {
constructor() {
this[TYPE] = '';
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const blobParts = arguments[0];
const options = arguments[1];
2022-03-21 00:47:21 +00:00
const buffers = [];
let size = 0;
2022-03-21 00:47:21 +00: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);
}
}
2022-03-21 00:47:21 +00:00
this[BUFFER] = Buffer.concat(buffers);
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;
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;
}
}
2022-03-21 00:47:21 +00:00
Object.defineProperties(Blob.prototype, {
size: { enumerable: true },
type: { enumerable: true },
slice: { enumerable: true }
});
2022-03-21 00:47:21 +00:00
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
value: 'Blob',
writable: false,
enumerable: false,
configurable: true
});
2022-03-21 00:47:21 +00:00
/**
* fetch-error.js
*
* FetchError interface for operational errors
*/
2022-03-21 00:47:21 +00: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);
2022-03-21 00:47:21 +00:00
this.message = message;
this.type = type;
2022-03-21 00:47:21 +00:00
// when err.type is `system`, err.code contains system error code
if (systemError) {
this.code = this.errno = systemError.code;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
FetchError.prototype = Object.create(Error.prototype);
FetchError.prototype.constructor = FetchError;
FetchError.prototype.name = 'FetchError';
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let convert;
try {
convert = (__nccwpck_require__(2877).convert);
} catch (e) {}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const INTERNALS = Symbol('Body internals');
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// fix an issue where "PassThrough" isn't a named export for node <10
const PassThrough = Stream.PassThrough;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
});
}
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
Body.prototype = {
get body() {
return this[INTERNALS].body;
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get bodyUsed() {
return this[INTERNALS].disturbed;
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as ArrayBuffer
*
* @return Promise
*/
arrayBuffer() {
return consumeBody.call(this).then(function (buf) {
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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
});
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as json
*
* @return Promise
*/
json() {
var _this2 = this;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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'));
}
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as text
*
* @return Promise
*/
text() {
return consumeBody.call(this).then(function (buffer) {
return buffer.toString();
});
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Decode response as buffer (non-spec api)
*
* @return Promise
*/
buffer() {
return consumeBody.call(this);
},
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return consumeBody.call(this).then(function (buffer) {
return convertBody(buffer, _this3.headers);
});
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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 }
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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);
}
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (this[INTERNALS].disturbed) {
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this[INTERNALS].disturbed = true;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (this[INTERNALS].error) {
return Body.Promise.reject(this[INTERNALS].error);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let body = this.body;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is null
if (body === null) {
return Body.Promise.resolve(Buffer.alloc(0));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is blob
if (isBlob(body)) {
body = body.stream();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is buffer
if (Buffer.isBuffer(body)) {
return Body.Promise.resolve(body);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// istanbul ignore if: should never happen
if (!(body instanceof Stream)) {
return Body.Promise.resolve(Buffer.alloc(0));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// body is stream
// get ready to actually consume the body
let accum = [];
let accumBytes = 0;
let abort = false;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return new Body.Promise(function (resolve, reject) {
let resTimeout;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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));
}
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
body.on('data', function (chunk) {
if (abort || chunk === null) {
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
accumBytes += chunk.length;
accum.push(chunk);
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
body.on('end', function () {
if (abort) {
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
clearTimeout(resTimeout);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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));
}
});
});
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const ct = headers.get('content-type');
let charset = 'utf-8';
let res, str;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// header
if (ct) {
res = /charset=([^;]*)/i.exec(ct);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// no charset in content type, peek at response body for at most 1024 bytes
str = buffer.slice(0, 1024).toString();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// html5
if (!res && str) {
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// html4
if (!res && str) {
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
if (!res) {
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
if (res) {
res.pop(); // drop last quote
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (res) {
res = /charset=(.*)/i.exec(res.pop());
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// xml
if (!res && str) {
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// found charset
if (res) {
charset = res.pop();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// prevent decode issues when sites use incorrect encoding
// ref: https://hsivonen.fi/encoding-menu/
if (charset === 'gb2312' || charset === 'gbk') {
charset = 'gb18030';
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// turn raw buffers into a single utf-8 buffer
return convert(buffer, 'UTF-8', charset).toString();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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';
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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]);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// don't allow cloning a used body
if (instance.bodyUsed) {
throw new Error('cannot clone body after it is used');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return body;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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';
}
2022-03-21 00:47:21 +00:00
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
}
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* headers.js
*
2022-03-21 00:47:21 +00:00
* Headers class offers convenient helpers
*/
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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`);
}
}
/**
2022-03-21 00:47:21 +00:00
* Find the key in the map object given a header name.
*
2022-03-21 00:47:21 +00:00
* Returns undefined if not found.
*
* @param String name Header name
* @return String|Undefined
*/
2022-03-21 00:47:21 +00:00
function find(map, name) {
name = name.toLowerCase();
for (const key in map) {
if (key.toLowerCase() === name) {
return key;
}
}
return undefined;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this[MAP] = Object.create(null);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (init instanceof Headers) {
const rawHeaders = init.raw();
const headerNames = Object.keys(rawHeaders);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
for (const headerName of headerNames) {
for (const value of rawHeaders[headerName]) {
this.append(headerName, value);
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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));
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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');
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
callback.call(thisArg, value, name, this);
pairs = getHeaders(this);
i++;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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];
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Append a value onto existing header
*
2022-03-21 00:47:21 +00:00
* @param String name Header name
* @param String value Header value
* @return Void
*/
2022-03-21 00:47:21 +00:00
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];
}
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Check for header name existence
*
2022-03-21 00:47:21 +00:00
* @param String name Header name
* @return Boolean
*/
2022-03-21 00:47:21 +00:00
has(name) {
name = `${name}`;
validateName(name);
return find(this[MAP], name) !== undefined;
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Delete all header values given name
*
2022-03-21 00:47:21 +00:00
* @param String name Header name
* @return Void
*/
2022-03-21 00:47:21 +00:00
delete(name) {
name = `${name}`;
validateName(name);
const key = find(this[MAP], name);
if (key !== undefined) {
delete this[MAP][key];
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* Return raw headers (non-spec api)
*
* @return Object
*/
raw() {
return this[MAP];
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Get an iterator on keys.
*
2022-03-21 00:47:21 +00:00
* @return Iterator
*/
2022-03-21 00:47:21 +00:00
keys() {
return createHeadersIterator(this, 'key');
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Get an iterator on values.
*
2022-03-21 00:47:21 +00:00
* @return Iterator
*/
2022-03-21 00:47:21 +00:00
values() {
return createHeadersIterator(this, 'value');
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Get an iterator on entries.
*
2022-03-21 00:47:21 +00:00
* This is the default iterator of the Headers object.
*
* @return Iterator
*/
2022-03-21 00:47:21 +00:00
[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
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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];
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return obj;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/**
* 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]];
}
}
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Response class
*
2022-03-21 00:47:21 +00:00
* @param Stream body Readable stream
* @param Object opts Response options
* @return Void
*/
2022-03-21 00:47:21 +00:00
class Response {
constructor() {
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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
};
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
get url() {
return this[INTERNALS$1].url || '';
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get status() {
return this[INTERNALS$1].status;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* Convenience property representing if the request ended normally
*/
get ok() {
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get redirected() {
return this[INTERNALS$1].counter > 0;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
get statusText() {
return this[INTERNALS$1].statusText;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get headers() {
return this[INTERNALS$1].headers;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* 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
});
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Body.mixIn(Response.prototype);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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 }
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
value: 'Response',
writable: false,
enumerable: false,
configurable: true
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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 {
2022-03-21 00:47:21 +00:00
// coerce input to a string before attempting to parse
parsedURL = parse_url(`${input}`);
}
2022-03-21 00:47:21 +00:00
input = {};
} else {
parsedURL = parse_url(input.url);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let method = init.method || input.method || 'GET';
method = method.toUpperCase();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
throw new TypeError('Request with GET/HEAD method cannot have body');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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);
}
2022-03-21 00:47:21 +00:00
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let signal = isRequest(input) ? input.signal : null;
if ('signal' in init) signal = init.signal;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (signal != null && !isAbortSignal(signal)) {
throw new TypeError('Expected signal to be an instanceof AbortSignal');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this[INTERNALS$2] = {
method,
redirect: init.redirect || input.redirect || 'follow',
headers,
parsedURL,
signal
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get method() {
return this[INTERNALS$2].method;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get url() {
return format_url(this[INTERNALS$2].parsedURL);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get headers() {
return this[INTERNALS$2].headers;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get redirect() {
return this[INTERNALS$2].redirect;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get signal() {
return this[INTERNALS$2].signal;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
/**
* Clone this request
*
* @return Request
*/
clone() {
return new Request(this);
}
2022-03-21 00:47:21 +00:00
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Body.mixIn(Request.prototype);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(Request.prototype, Symbol.toStringTag, {
value: 'Request',
writable: false,
enumerable: false,
configurable: true
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperties(Request.prototype, {
method: { enumerable: true },
url: { enumerable: true },
headers: { enumerable: true },
redirect: { enumerable: true },
clone: { enumerable: true },
signal: { enumerable: true }
});
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Convert a Request to Node.js http request options.
*
2022-03-21 00:47:21 +00:00
* @param Request A Request instance
* @return Object The options object to be passed to http.request
*/
2022-03-21 00:47:21 +00:00
function getNodeRequestOptions(request) {
const parsedURL = request[INTERNALS$2].parsedURL;
const headers = new Headers(request[INTERNALS$2].headers);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// fetch step 1.3
if (!headers.has('Accept')) {
headers.set('Accept', '*/*');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// Basic fetch
if (!parsedURL.protocol || !parsedURL.hostname) {
throw new TypeError('Only absolute URLs are supported');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (!/^https?:$/.test(parsedURL.protocol)) {
throw new TypeError('Only HTTP(S) protocols are supported');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
// 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);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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)');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// HTTP-network-or-cache fetch step 2.15
if (request.compress && !headers.has('Accept-Encoding')) {
headers.set('Accept-Encoding', 'gzip,deflate');
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
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
});
}
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* abort-error.js
*
2022-03-21 00:47:21 +00:00
* AbortError interface for cancelled requests
*/
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Create AbortError instance
*
2022-03-21 00:47:21 +00:00
* @param String message Error message for human
* @return AbortError
*/
2022-03-21 00:47:21 +00:00
function AbortError(message) {
Error.call(this, message);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this.type = 'aborted';
this.message = message;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// hide custom error implementation details from end-users
Error.captureStackTrace(this, this.constructor);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
/**
2022-03-21 00:47:21 +00:00
* Fetch function
*
2022-03-21 00:47:21 +00:00
* @param Mixed url Absolute url or Request instance
* @param Object opts Fetch options
* @return Promise
*/
2022-03-21 00:47:21 +00:00
function fetch(url, opts) {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// allow custom promise
if (!fetch.Promise) {
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
Body.Promise = fetch.Promise;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
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(`uri requested responds with a redirect, 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,
size: request.size
};
// 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;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// prepare response
res.once('end', function () {
if (signal) signal.removeEventListener('abort', abortAndFinalize);
});
let body = res.pipe(new PassThrough$1());
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const response_options = {
url: request.url,
status: res.statusCode,
statusText: res.statusMessage,
headers: headers,
size: request.size,
timeout: request.timeout,
counter: request.counter
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// for gzip
if (codings == 'gzip' || codings == 'x-gzip') {
body = body.pipe(zlib.createGunzip(zlibOptions));
response = new Response(body, response_options);
resolve(response);
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 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());
}
2022-03-21 00:47:21 +00:00
response = new Response(body, response_options);
resolve(response);
});
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// for br
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
body = body.pipe(zlib.createBrotliDecompress());
response = new Response(body, response_options);
resolve(response);
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// otherwise, use response as-is
response = new Response(body, response_options);
resolve(response);
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// expose Promise
fetch.Promise = global.Promise;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 5884:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var readfiles = __nccwpck_require__(4719);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports = readfiles;
/***/ }),
/***/ 4719:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var fs = __nccwpck_require__(7147);
var path = __nccwpck_require__(1017);
var Promise = (__nccwpck_require__(8878).Promise);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function buildFilter(filters) {
var filters = (filters instanceof Array) ? filters.slice() : [filters];
var filterArray = [];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (filters.length === 0) return null;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
while(filters.length > 0) {
var filter = filters.shift();
filterArray.push('\\/?' + filter.replace(/\./g, '\\.')
.replace(/(\*?)(\*)(?!\*)/g, function(match, prefix) {
if(prefix == '*') {
return match;
}
return '[^\\/]*';
})
.replace(/\?/g, '[^\\/]?')
.replace(/\*\*/g, '\.*')
.replace(/([\-\+\|])/g, '\\$1')
);
}
return new RegExp('^' + filterArray.join('|') + '$', 'i');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function readfiles(dir, options, callback) {
if (typeof options === 'function' || options === null) {
callback = options;
options = {};
}
options = options || {};
callback = typeof callback === 'function' ? callback : function () {};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return new Promise(function (resolve, reject) {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var files = [];
var subdirs = [];
var filterRegExp = options.filter && buildFilter(options.filter);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
(function traverseDir(dirpath, done) {
fs.readdir(dirpath, function (err, fileList) {
if (err) {
// if rejectOnError is not false, reject the promise
if (options.rejectOnError !== false) {
return reject(err);
}
return done(files);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// reverse the order of the files if the reverse option is true
if (options.reverse === true) {
fileList = fileList.reverse();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
(function next() {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// if the file list is empty then call done
if (fileList.length === 0) {
done(files);
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var filename = fileList.shift();
var relFilename = path.join(subdirs.join('/'), filename);
var fullpath = path.join(dirpath, filename);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// skip file if it's a hidden file and the hidden option is not set
if (options.hidden !== true && /^\./.test(filename)) {
return next();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// stat the full path
fs.stat(fullpath, function (err, stat) {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (err) {
// call callback with the error
var result = callback(err, relFilename, null, stat);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// if callback result is a function then call the result with next as a parameter
if (typeof result === 'function' && !err) {
return result(next);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// if rejectOnError is not false, reject the promise
if (options.rejectOnError !== false) {
return reject(err);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return next();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (stat.isDirectory()) {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// limit the depth of the traversal if depth is defined
if (!isNaN(options.depth) && options.depth >= 0 && (subdirs.length + 1) > options.depth) {
return next();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// traverse the sub-directory
subdirs.push(filename);
traverseDir(fullpath, function () {
subdirs.pop();
next();
});
} else if (stat.isFile()) {
// test filters, if it does not match move to next file
if (filterRegExp && !filterRegExp.test('/' + relFilename)) {
return next();
}
// set the format of the output filename
var outputName = relFilename;
if (options.filenameFormat === readfiles.FULL_PATH) {
outputName = fullpath;
}else if (options.filenameFormat === readfiles.FILENAME) {
outputName = filename;
}
files.push(outputName);
// promise to handle file reading (if not disabled)
new Promise(function (resolve) {
if (options.readContents === false) {
return resolve(null);
}
// read the file
fs.readFile(fullpath, options.encoding || 'utf8', function (err, content) {
if (err) throw err;
resolve(content);
});
}).then(function (content) {
// call the callback with the content
var result = callback(err, outputName, content, stat);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// if callback result is a function then call the result with next as a parameter
if (typeof result === 'function' && !err) {
return result(next);
}
// call the next if async is not true
options.async !== true && next();
}).catch(function (err) {
if (options.rejectOnError !== false) {
return reject(err);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
next();
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
} else {
next();
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
});
})();
});
})(dir, resolve);
});
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
readfiles.RELATIVE = 0;
readfiles.FULL_PATH = 1;
readfiles.FILENAME = 2;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports = readfiles;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 1223:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var wrappy = __nccwpck_require__(2940)
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
once.proto = once(function () {
Object.defineProperty(Function.prototype, 'once', {
value: function () {
return once(this)
},
configurable: true
})
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(Function.prototype, 'onceStrict', {
value: function () {
return onceStrict(this)
},
configurable: true
})
})
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
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
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 4256:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var punycode = __nccwpck_require__(5477);
var mappingTable = __nccwpck_require__(2020);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var PROCESSING_OPTIONS = {
TRANSITIONAL: 0,
NONTRANSITIONAL: 1
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function normalize(str) { // fix bug in v8
return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function findStatus(val) {
var start = 0;
var end = mappingTable.length - 1;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
while (start <= end) {
var mid = Math.floor((start + end) / 2);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var target = mappingTable[mid];
if (target[0][0] <= val && target[0][1] >= val) {
return target;
} else if (target[0][0] > val) {
end = mid - 1;
} else {
start = mid + 1;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return null;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function countSymbols(string) {
return string
// replace every surrogate pair with a BMP symbol
.replace(regexAstralSymbols, '_')
// then get the length
.length;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function mapChars(domain_name, useSTD3, processing_option) {
var hasError = false;
var processed = "";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var len = countSymbols(domain_name);
for (var i = 0; i < len; ++i) {
var codePoint = domain_name.codePointAt(i);
var status = findStatus(codePoint);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
switch (status[1]) {
case "disallowed":
hasError = true;
processed += String.fromCodePoint(codePoint);
break;
case "ignored":
break;
case "mapped":
processed += String.fromCodePoint.apply(String, status[2]);
break;
case "deviation":
if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
processed += String.fromCodePoint.apply(String, status[2]);
} else {
processed += String.fromCodePoint(codePoint);
}
break;
case "valid":
processed += String.fromCodePoint(codePoint);
break;
case "disallowed_STD3_mapped":
if (useSTD3) {
hasError = true;
processed += String.fromCodePoint(codePoint);
} else {
processed += String.fromCodePoint.apply(String, status[2]);
}
break;
case "disallowed_STD3_valid":
if (useSTD3) {
hasError = true;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
processed += String.fromCodePoint(codePoint);
break;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return {
string: processed,
error: hasError
};
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function validateLabel(label, processing_option) {
if (label.substr(0, 4) === "xn--") {
label = punycode.toUnicode(label);
processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var error = false;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (normalize(label) !== label ||
(label[3] === "-" && label[4] === "-") ||
label[0] === "-" || label[label.length - 1] === "-" ||
label.indexOf(".") !== -1 ||
label.search(combiningMarksRegex) === 0) {
error = true;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var len = countSymbols(label);
for (var i = 0; i < len; ++i) {
var status = findStatus(label.codePointAt(i));
if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") ||
(processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&
status[1] !== "valid" && status[1] !== "deviation")) {
error = true;
break;
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return {
label: label,
error: error
};
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function processing(domain_name, useSTD3, processing_option) {
var result = mapChars(domain_name, useSTD3, processing_option);
result.string = normalize(result.string);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var labels = result.string.split(".");
for (var i = 0; i < labels.length; ++i) {
try {
var validation = validateLabel(labels[i]);
labels[i] = validation.label;
result.error = result.error || validation.error;
} catch(e) {
result.error = true;
}
}
return {
string: labels.join("."),
error: result.error
};
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {
var result = processing(domain_name, useSTD3, processing_option);
var labels = result.string.split(".");
labels = labels.map(function(l) {
try {
return punycode.toASCII(l);
} catch(e) {
result.error = true;
return l;
}
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (verifyDnsLength) {
var total = labels.slice(0, labels.length - 1).join(".").length;
if (total.length > 253 || total.length === 0) {
result.error = true;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
for (var i=0; i < labels.length; ++i) {
if (labels.length > 63 || labels.length === 0) {
result.error = true;
break;
}
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (result.error) return null;
return labels.join(".");
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports.toUnicode = function(domain_name, useSTD3) {
var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return {
domain: result.string,
error: result.error
};
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 4294:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports = __nccwpck_require__(4219);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 4219:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
var net = __nccwpck_require__(1808);
var tls = __nccwpck_require__(4404);
var http = __nccwpck_require__(3685);
var https = __nccwpck_require__(5687);
var events = __nccwpck_require__(2361);
var assert = __nccwpck_require__(9491);
var util = __nccwpck_require__(3837);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
exports.httpOverHttp = httpOverHttp;
exports.httpsOverHttp = httpsOverHttp;
exports.httpOverHttps = httpOverHttps;
exports.httpsOverHttps = httpsOverHttps;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function httpOverHttp(options) {
var agent = new TunnelingAgent(options);
agent.request = http.request;
return agent;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function httpsOverHttp(options) {
var agent = new TunnelingAgent(options);
agent.request = http.request;
agent.createSocket = createSecureSocket;
agent.defaultPort = 443;
return agent;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function httpOverHttps(options) {
var agent = new TunnelingAgent(options);
agent.request = https.request;
return agent;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function httpsOverHttps(options) {
var agent = new TunnelingAgent(options);
agent.request = https.request;
agent.createSocket = createSecureSocket;
agent.defaultPort = 443;
return agent;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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 = [];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
var self = this;
var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
if (self.sockets.length >= this.maxSockets) {
// We are over limit so we'll add it to the queue.
self.requests.push(options);
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onFree() {
self.emit('free', socket, options);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onCloseOrRemove(err) {
self.removeSocket(socket);
socket.removeListener('free', onFree);
socket.removeListener('close', onCloseOrRemove);
socket.removeListener('agentRemove', onCloseOrRemove);
}
});
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
var self = this;
var placeholder = {};
self.sockets.push(placeholder);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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');
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onResponse(res) {
// Very hacky. This is necessary to avoid http-parser leaks.
res.upgrade = true;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onUpgrade(res, socket, head) {
// Hacky.
process.nextTick(function() {
onConnect(res, socket, head);
});
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onConnect(res, socket, head) {
connectReq.removeAllListeners();
socket.removeAllListeners();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function onError(cause) {
connectReq.removeAllListeners();
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
var pos = this.sockets.indexOf(socket)
if (pos === -1) {
return;
}
this.sockets.splice(pos, 1);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
});
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// 0 is dummy port for v0.6
var secureSocket = tls.connect(0, tlsOptions);
self.sockets[self.sockets.indexOf(socket)] = secureSocket;
cb(secureSocket);
});
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function toOptions(host, port, localAddress) {
if (typeof host === 'string') { // since v0.10
return {
host: host,
port: port,
localAddress: localAddress
};
}
return host; // for v0.11 or later
}
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];
}
}
}
}
return target;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00: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);
}
} else {
debug = function() {};
}
exports.debug = debug; // for test
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 5030:
/***/ ((__unused_webpack_module, exports) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(exports, "__esModule", ({ value: true }));
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
function getUserAgent() {
if (typeof navigator === "object" && "userAgent" in navigator) {
return navigator.userAgent;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (typeof process === "object" && "version" in process) {
return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return "<environment undetectable>";
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
exports.getUserAgent = getUserAgent;
//# sourceMappingURL=index.js.map
2021-01-08 20:47:49 +00:00
/***/ }),
2022-03-21 00:47:21 +00:00
/***/ 1463:
/***/ ((__unused_webpack_module, exports) => {
2022-03-21 00:47:21 +00:00
"use strict";
exports.fromCallback = function (fn) {
return Object.defineProperty(function (...args) {
if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
else {
return new Promise((resolve, reject) => {
fn.call(
this,
...args,
(err, res) => (err != null) ? reject(err) : resolve(res)
)
})
}
}, 'name', { value: fn.name })
}
exports.fromPromise = function (fn) {
return Object.defineProperty(function (...args) {
const cb = args[args.length - 1]
if (typeof cb !== 'function') return fn.apply(this, args)
else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)
}, 'name', { value: fn.name })
}
/***/ }),
2022-03-21 00:47:21 +00:00
/***/ 4886:
/***/ ((module) => {
2022-03-21 00:47:21 +00:00
"use strict";
2022-03-21 00:47:21 +00:00
var conversions = {};
module.exports = conversions;
2022-03-21 00:47:21 +00:00
function sign(x) {
return x < 0 ? -1 : 1;
}
2022-03-21 00:47:21 +00:00
function evenRound(x) {
// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)
return Math.floor(x);
} else {
return Math.round(x);
}
}
2022-03-21 00:47:21 +00:00
function createNumberConversion(bitLength, typeOpts) {
if (!typeOpts.unsigned) {
--bitLength;
}
const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
const upperBound = Math.pow(2, bitLength) - 1;
2022-03-21 00:47:21 +00:00
const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
2022-03-21 00:47:21 +00:00
return function(V, opts) {
if (!opts) opts = {};
2022-03-21 00:47:21 +00:00
let x = +V;
2022-03-21 00:47:21 +00:00
if (opts.enforceRange) {
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite number");
}
2022-03-21 00:47:21 +00:00
x = sign(x) * Math.floor(Math.abs(x));
if (x < lowerBound || x > upperBound) {
throw new TypeError("Argument is not in byte range");
}
2022-03-21 00:47:21 +00:00
return x;
}
2022-03-21 00:47:21 +00:00
if (!isNaN(x) && opts.clamp) {
x = evenRound(x);
2022-03-21 00:47:21 +00:00
if (x < lowerBound) x = lowerBound;
if (x > upperBound) x = upperBound;
return x;
}
2022-03-21 00:47:21 +00:00
if (!Number.isFinite(x) || x === 0) {
return 0;
}
2022-03-21 00:47:21 +00:00
x = sign(x) * Math.floor(Math.abs(x));
x = x % moduloVal;
2022-03-21 00:47:21 +00:00
if (!typeOpts.unsigned && x >= moduloBound) {
return x - moduloVal;
} else if (typeOpts.unsigned) {
if (x < 0) {
x += moduloVal;
} else if (x === -0) { // don't return negative zero
return 0;
}
2022-03-21 00:47:21 +00:00
}
2022-03-21 00:47:21 +00:00
return x;
}
}
2022-03-21 00:47:21 +00:00
conversions["void"] = function () {
return undefined;
};
2022-03-21 00:47:21 +00:00
conversions["boolean"] = function (val) {
return !!val;
};
2022-03-21 00:47:21 +00:00
conversions["byte"] = createNumberConversion(8, { unsigned: false });
conversions["octet"] = createNumberConversion(8, { unsigned: true });
2022-03-21 00:47:21 +00:00
conversions["short"] = createNumberConversion(16, { unsigned: false });
conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
2022-03-21 00:47:21 +00:00
conversions["long"] = createNumberConversion(32, { unsigned: false });
conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
2022-03-21 00:47:21 +00:00
conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
2022-03-21 00:47:21 +00:00
conversions["double"] = function (V) {
const x = +V;
2022-03-21 00:47:21 +00:00
if (!Number.isFinite(x)) {
throw new TypeError("Argument is not a finite floating-point value");
}
2022-03-21 00:47:21 +00:00
return x;
};
2022-03-21 00:47:21 +00:00
conversions["unrestricted double"] = function (V) {
const x = +V;
2022-03-21 00:47:21 +00:00
if (isNaN(x)) {
throw new TypeError("Argument is NaN");
}
2022-03-21 00:47:21 +00:00
return x;
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// not quite valid, but good enough for JS
conversions["float"] = conversions["double"];
conversions["unrestricted float"] = conversions["unrestricted double"];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
conversions["DOMString"] = function (V, opts) {
if (!opts) opts = {};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (opts.treatNullAsEmptyString && V === null) {
return "";
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return String(V);
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
conversions["ByteString"] = function (V, opts) {
const x = String(V);
let c = undefined;
for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
if (c > 255) {
throw new TypeError("Argument is not a valid bytestring");
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return x;
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
conversions["USVString"] = function (V) {
const S = String(V);
const n = S.length;
const U = [];
for (let i = 0; i < n; ++i) {
const c = S.charCodeAt(i);
if (c < 0xD800 || c > 0xDFFF) {
U.push(String.fromCodePoint(c));
} else if (0xDC00 <= c && c <= 0xDFFF) {
U.push(String.fromCodePoint(0xFFFD));
} else {
if (i === n - 1) {
U.push(String.fromCodePoint(0xFFFD));
} else {
const d = S.charCodeAt(i + 1);
if (0xDC00 <= d && d <= 0xDFFF) {
const a = c & 0x3FF;
const b = d & 0x3FF;
U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
++i;
} else {
U.push(String.fromCodePoint(0xFFFD));
}
}
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return U.join('');
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
conversions["Date"] = function (V, opts) {
if (!(V instanceof Date)) {
throw new TypeError("Argument is not a Date object");
}
if (isNaN(V)) {
return undefined;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return V;
};
conversions["RegExp"] = function (V, opts) {
if (!(V instanceof RegExp)) {
V = new RegExp(V);
}
return V;
};
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 7537:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const usm = __nccwpck_require__(2158);
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
exports.implementation = class URLImpl {
constructor(constructorArgs) {
const url = constructorArgs[0];
const base = constructorArgs[1];
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
let parsedBase = null;
if (base !== undefined) {
parsedBase = usm.basicURLParse(base);
if (parsedBase === "failure") {
throw new TypeError("Invalid base URL");
}
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this._url = parsedURL;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
// TODO: query stuff
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get href() {
return usm.serializeURL(this._url);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
set href(v) {
const parsedURL = usm.basicURLParse(v);
if (parsedURL === "failure") {
throw new TypeError("Invalid URL");
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
this._url = parsedURL;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get origin() {
return usm.serializeURLOrigin(this._url);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get protocol() {
return this._url.scheme + ":";
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
set protocol(v) {
usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
}
get username() {
return this._url.username;
}
set username(v) {
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
return;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
usm.setTheUsername(this._url, v);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get password() {
return this._url.password;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
set password(v) {
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
usm.setThePassword(this._url, v);
}
get host() {
const url = this._url;
if (url.host === null) {
return "";
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
if (url.port === null) {
return usm.serializeHost(url.host);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
set host(v) {
if (this._url.cannotBeABaseURL) {
return;
}
2022-03-21 00:47:21 +00:00
usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
get hostname() {
if (this._url.host === null) {
return "";
}
return usm.serializeHost(this._url.host);
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
set hostname(v) {
if (this._url.cannotBeABaseURL) {
return;
}
usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
get port() {
if (this._url.port === null) {
return "";
}
return usm.serializeInteger(this._url.port);
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
set port(v) {
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
return;
}
if (v === "") {
this._url.port = null;
} else {
usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
}
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
get pathname() {
if (this._url.cannotBeABaseURL) {
return this._url.path[0];
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
if (this._url.path.length === 0) {
return "";
}
return "/" + this._url.path.join("/");
}
set pathname(v) {
if (this._url.cannotBeABaseURL) {
return;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
this._url.path = [];
usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
}
get search() {
if (this._url.query === null || this._url.query === "") {
return "";
}
return "?" + this._url.query;
}
set search(v) {
// TODO: query stuff
const url = this._url;
if (v === "") {
url.query = null;
return;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
const input = v[0] === "?" ? v.substring(1) : v;
url.query = "";
usm.basicURLParse(input, { url, stateOverride: "query" });
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
get hash() {
if (this._url.fragment === null || this._url.fragment === "") {
return "";
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
return "#" + this._url.fragment;
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
set hash(v) {
if (v === "") {
this._url.fragment = null;
return;
}
const input = v[0] === "#" ? v.substring(1) : v;
this._url.fragment = "";
usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
toJSON() {
return this.href;
2021-01-08 20:47:49 +00:00
}
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 3394:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
"use strict";
const conversions = __nccwpck_require__(4886);
const utils = __nccwpck_require__(3185);
const Impl = __nccwpck_require__(7537);
const impl = utils.implSymbol;
function URL(url) {
if (!this || this[impl] || !(this instanceof URL)) {
throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
if (arguments.length < 1) {
throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
}
const args = [];
for (let i = 0; i < arguments.length && i < 2; ++i) {
args[i] = arguments[i];
}
args[0] = conversions["USVString"](args[0]);
if (args[1] !== undefined) {
args[1] = conversions["USVString"](args[1]);
}
module.exports.setup(this, args);
}
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
URL.prototype.toJSON = function toJSON() {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
const args = [];
for (let i = 0; i < arguments.length && i < 0; ++i) {
args[i] = arguments[i];
}
return this[impl].toJSON.apply(this[impl], args);
};
Object.defineProperty(URL.prototype, "href", {
get() {
return this[impl].href;
},
set(V) {
V = conversions["USVString"](V);
this[impl].href = V;
},
enumerable: true,
configurable: true
});
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
URL.prototype.toString = function () {
if (!this || !module.exports.is(this)) {
throw new TypeError("Illegal invocation");
}
return this.href;
};
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
Object.defineProperty(URL.prototype, "origin", {
get() {
return this[impl].origin;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "protocol", {
get() {
return this[impl].protocol;
},
set(V) {
V = conversions["USVString"](V);
this[impl].protocol = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "username", {
get() {
return this[impl].username;
},
set(V) {
V = conversions["USVString"](V);
this[impl].username = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "password", {
get() {
return this[impl].password;
},
set(V) {
V = conversions["USVString"](V);
this[impl].password = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "host", {
get() {
return this[impl].host;
},
set(V) {
V = conversions["USVString"](V);
this[impl].host = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hostname", {
get() {
return this[impl].hostname;
},
set(V) {
V = conversions["USVString"](V);
this[impl].hostname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "port", {
get() {
return this[impl].port;
},
set(V) {
V = conversions["USVString"](V);
this[impl].port = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "pathname", {
get() {
return this[impl].pathname;
},
set(V) {
V = conversions["USVString"](V);
this[impl].pathname = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "search", {
get() {
return this[impl].search;
},
set(V) {
V = conversions["USVString"](V);
this[impl].search = V;
},
enumerable: true,
configurable: true
});
Object.defineProperty(URL.prototype, "hash", {
get() {
return this[impl].hash;
},
set(V) {
V = conversions["USVString"](V);
this[impl].hash = V;
},
enumerable: true,
configurable: true
});
module.exports = {
is(obj) {
return !!obj && obj[impl] instanceof Impl.implementation;
},
create(constructorArgs, privateData) {
let obj = Object.create(URL.prototype);
this.setup(obj, constructorArgs, privateData);
return obj;
},
setup(obj, constructorArgs, privateData) {
if (!privateData) privateData = {};
privateData.wrapper = obj;
obj[impl] = new Impl.implementation(constructorArgs, privateData);
obj[impl][utils.wrapperSymbol] = obj;
},
interface: URL,
expose: {
Window: { URL: URL },
Worker: { URL: URL }
2021-01-08 20:47:49 +00:00
}
2022-03-21 00:47:21 +00:00
};
2021-01-08 20:47:49 +00:00
/***/ }),
2022-03-21 00:47:21 +00:00
/***/ 8665:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
"use strict";
2022-03-21 00:47:21 +00:00
exports.URL = __nccwpck_require__(3394)["interface"];
exports.serializeURL = __nccwpck_require__(2158).serializeURL;
exports.serializeURLOrigin = __nccwpck_require__(2158).serializeURLOrigin;
exports.basicURLParse = __nccwpck_require__(2158).basicURLParse;
exports.setTheUsername = __nccwpck_require__(2158).setTheUsername;
exports.setThePassword = __nccwpck_require__(2158).setThePassword;
exports.serializeHost = __nccwpck_require__(2158).serializeHost;
exports.serializeInteger = __nccwpck_require__(2158).serializeInteger;
exports.parseURL = __nccwpck_require__(2158).parseURL;
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 2158:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
"use strict";
const punycode = __nccwpck_require__(5477);
const tr46 = __nccwpck_require__(4256);
const specialSchemes = {
ftp: 21,
file: null,
gopher: 70,
http: 80,
https: 443,
ws: 80,
wss: 443
};
const failure = Symbol("failure");
function countSymbols(str) {
return punycode.ucs2.decode(str).length;
}
function at(input, idx) {
const c = input[idx];
return isNaN(c) ? undefined : String.fromCodePoint(c);
}
function isASCIIDigit(c) {
return c >= 0x30 && c <= 0x39;
}
function isASCIIAlpha(c) {
return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
}
function isASCIIAlphanumeric(c) {
return isASCIIAlpha(c) || isASCIIDigit(c);
}
function isASCIIHex(c) {
return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
}
function isSingleDot(buffer) {
return buffer === "." || buffer.toLowerCase() === "%2e";
}
function isDoubleDot(buffer) {
buffer = buffer.toLowerCase();
return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
}
function isWindowsDriveLetterCodePoints(cp1, cp2) {
return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
}
function isWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
}
function isNormalizedWindowsDriveLetterString(string) {
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
}
function containsForbiddenHostCodePoint(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function containsForbiddenHostCodePointExcludingPercent(string) {
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
}
function isSpecialScheme(scheme) {
return specialSchemes[scheme] !== undefined;
}
function isSpecial(url) {
return isSpecialScheme(url.scheme);
}
function defaultPort(scheme) {
return specialSchemes[scheme];
}
function percentEncode(c) {
let hex = c.toString(16).toUpperCase();
if (hex.length === 1) {
hex = "0" + hex;
}
return "%" + hex;
}
function utf8PercentEncode(c) {
const buf = new Buffer(c);
let str = "";
for (let i = 0; i < buf.length; ++i) {
str += percentEncode(buf[i]);
}
return str;
}
function utf8PercentDecode(str) {
const input = new Buffer(str);
const output = [];
for (let i = 0; i < input.length; ++i) {
if (input[i] !== 37) {
output.push(input[i]);
} else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
i += 2;
} else {
output.push(input[i]);
}
}
return new Buffer(output).toString();
}
function isC0ControlPercentEncode(c) {
return c <= 0x1F || c > 0x7E;
}
const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
function isPathPercentEncode(c) {
return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
}
const extraUserinfoPercentEncodeSet =
new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
function isUserinfoPercentEncode(c) {
return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
}
function percentEncodeChar(c, encodeSetPredicate) {
const cStr = String.fromCodePoint(c);
if (encodeSetPredicate(c)) {
return utf8PercentEncode(cStr);
}
return cStr;
}
function parseIPv4Number(input) {
let R = 10;
if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
input = input.substring(2);
R = 16;
} else if (input.length >= 2 && input.charAt(0) === "0") {
input = input.substring(1);
R = 8;
}
if (input === "") {
return 0;
}
const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);
if (regex.test(input)) {
return failure;
}
return parseInt(input, R);
}
function parseIPv4(input) {
const parts = input.split(".");
if (parts[parts.length - 1] === "") {
if (parts.length > 1) {
parts.pop();
}
}
if (parts.length > 4) {
return input;
}
const numbers = [];
for (const part of parts) {
if (part === "") {
return input;
}
const n = parseIPv4Number(part);
if (n === failure) {
return input;
}
numbers.push(n);
}
for (let i = 0; i < numbers.length - 1; ++i) {
if (numbers[i] > 255) {
return failure;
}
}
if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
return failure;
}
let ipv4 = numbers.pop();
let counter = 0;
for (const n of numbers) {
ipv4 += n * Math.pow(256, 3 - counter);
++counter;
}
return ipv4;
}
function serializeIPv4(address) {
let output = "";
let n = address;
for (let i = 1; i <= 4; ++i) {
output = String(n % 256) + output;
if (i !== 4) {
output = "." + output;
}
n = Math.floor(n / 256);
}
return output;
}
function parseIPv6(input) {
const address = [0, 0, 0, 0, 0, 0, 0, 0];
let pieceIndex = 0;
let compress = null;
let pointer = 0;
input = punycode.ucs2.decode(input);
if (input[pointer] === 58) {
if (input[pointer + 1] !== 58) {
return failure;
}
pointer += 2;
++pieceIndex;
compress = pieceIndex;
}
while (pointer < input.length) {
if (pieceIndex === 8) {
return failure;
}
if (input[pointer] === 58) {
if (compress !== null) {
return failure;
}
++pointer;
++pieceIndex;
compress = pieceIndex;
continue;
}
let value = 0;
let length = 0;
while (length < 4 && isASCIIHex(input[pointer])) {
value = value * 0x10 + parseInt(at(input, pointer), 16);
++pointer;
++length;
}
if (input[pointer] === 46) {
if (length === 0) {
return failure;
}
pointer -= length;
if (pieceIndex > 6) {
return failure;
}
let numbersSeen = 0;
while (input[pointer] !== undefined) {
let ipv4Piece = null;
if (numbersSeen > 0) {
if (input[pointer] === 46 && numbersSeen < 4) {
++pointer;
} else {
return failure;
}
}
if (!isASCIIDigit(input[pointer])) {
return failure;
}
while (isASCIIDigit(input[pointer])) {
const number = parseInt(at(input, pointer));
if (ipv4Piece === null) {
ipv4Piece = number;
} else if (ipv4Piece === 0) {
return failure;
} else {
ipv4Piece = ipv4Piece * 10 + number;
}
if (ipv4Piece > 255) {
return failure;
}
++pointer;
}
address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
++numbersSeen;
if (numbersSeen === 2 || numbersSeen === 4) {
++pieceIndex;
}
}
if (numbersSeen !== 4) {
return failure;
}
break;
} else if (input[pointer] === 58) {
++pointer;
if (input[pointer] === undefined) {
return failure;
}
} else if (input[pointer] !== undefined) {
return failure;
}
address[pieceIndex] = value;
++pieceIndex;
}
if (compress !== null) {
let swaps = pieceIndex - compress;
pieceIndex = 7;
while (pieceIndex !== 0 && swaps > 0) {
const temp = address[compress + swaps - 1];
address[compress + swaps - 1] = address[pieceIndex];
address[pieceIndex] = temp;
--pieceIndex;
--swaps;
}
} else if (compress === null && pieceIndex !== 8) {
return failure;
}
return address;
}
function serializeIPv6(address) {
let output = "";
const seqResult = findLongestZeroSequence(address);
const compress = seqResult.idx;
let ignore0 = false;
for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
if (ignore0 && address[pieceIndex] === 0) {
continue;
} else if (ignore0) {
ignore0 = false;
}
if (compress === pieceIndex) {
const separator = pieceIndex === 0 ? "::" : ":";
output += separator;
ignore0 = true;
continue;
}
output += address[pieceIndex].toString(16);
if (pieceIndex !== 7) {
output += ":";
}
}
return output;
}
function parseHost(input, isSpecialArg) {
if (input[0] === "[") {
if (input[input.length - 1] !== "]") {
return failure;
}
return parseIPv6(input.substring(1, input.length - 1));
}
if (!isSpecialArg) {
return parseOpaqueHost(input);
}
const domain = utf8PercentDecode(input);
const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
if (asciiDomain === null) {
return failure;
}
if (containsForbiddenHostCodePoint(asciiDomain)) {
return failure;
}
const ipv4Host = parseIPv4(asciiDomain);
if (typeof ipv4Host === "number" || ipv4Host === failure) {
return ipv4Host;
}
return asciiDomain;
}
function parseOpaqueHost(input) {
if (containsForbiddenHostCodePointExcludingPercent(input)) {
return failure;
}
let output = "";
const decoded = punycode.ucs2.decode(input);
for (let i = 0; i < decoded.length; ++i) {
output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
}
return output;
}
function findLongestZeroSequence(arr) {
let maxIdx = null;
let maxLen = 1; // only find elements > 1
let currStart = null;
let currLen = 0;
for (let i = 0; i < arr.length; ++i) {
if (arr[i] !== 0) {
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
currStart = null;
currLen = 0;
} else {
if (currStart === null) {
currStart = i;
}
++currLen;
}
}
// if trailing zeros
if (currLen > maxLen) {
maxIdx = currStart;
maxLen = currLen;
}
return {
idx: maxIdx,
len: maxLen
};
}
function serializeHost(host) {
if (typeof host === "number") {
return serializeIPv4(host);
}
// IPv6 serializer
if (host instanceof Array) {
return "[" + serializeIPv6(host) + "]";
}
return host;
}
function trimControlChars(url) {
return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
}
function trimTabAndNewline(url) {
return url.replace(/\u0009|\u000A|\u000D/g, "");
}
function shortenPath(url) {
const path = url.path;
if (path.length === 0) {
return;
}
if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
return;
}
path.pop();
}
function includesCredentials(url) {
return url.username !== "" || url.password !== "";
}
function cannotHaveAUsernamePasswordPort(url) {
return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
}
function isNormalizedWindowsDriveLetter(string) {
return /^[A-Za-z]:$/.test(string);
}
function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
this.pointer = 0;
this.input = input;
this.base = base || null;
this.encodingOverride = encodingOverride || "utf-8";
this.stateOverride = stateOverride;
this.url = url;
this.failure = false;
this.parseError = false;
if (!this.url) {
this.url = {
scheme: "",
username: "",
password: "",
host: null,
port: null,
path: [],
query: null,
fragment: null,
cannotBeABaseURL: false
};
const res = trimControlChars(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
}
const res = trimTabAndNewline(this.input);
if (res !== this.input) {
this.parseError = true;
}
this.input = res;
this.state = stateOverride || "scheme start";
this.buffer = "";
this.atFlag = false;
this.arrFlag = false;
this.passwordTokenSeenFlag = false;
this.input = punycode.ucs2.decode(this.input);
for (; this.pointer <= this.input.length; ++this.pointer) {
const c = this.input[this.pointer];
const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
// exec state machine
const ret = this["parse " + this.state](c, cStr);
if (!ret) {
break; // terminate algorithm
} else if (ret === failure) {
this.failure = true;
break;
}
}
}
URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
if (isASCIIAlpha(c)) {
this.buffer += cStr.toLowerCase();
this.state = "scheme";
} else if (!this.stateOverride) {
this.state = "no scheme";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
this.buffer += cStr.toLowerCase();
} else if (c === 58) {
if (this.stateOverride) {
if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
return false;
}
if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
return false;
}
if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
return false;
}
if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
return false;
}
}
this.url.scheme = this.buffer;
this.buffer = "";
if (this.stateOverride) {
return false;
}
if (this.url.scheme === "file") {
if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
this.parseError = true;
}
this.state = "file";
} else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
this.state = "special relative or authority";
} else if (isSpecial(this.url)) {
this.state = "special authority slashes";
} else if (this.input[this.pointer + 1] === 47) {
this.state = "path or authority";
++this.pointer;
} else {
this.url.cannotBeABaseURL = true;
this.url.path.push("");
this.state = "cannot-be-a-base-URL path";
}
} else if (!this.stateOverride) {
this.buffer = "";
this.state = "no scheme";
this.pointer = -1;
} else {
this.parseError = true;
return failure;
}
return true;
};
URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
return failure;
} else if (this.base.cannotBeABaseURL && c === 35) {
this.url.scheme = this.base.scheme;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.url.cannotBeABaseURL = true;
this.state = "fragment";
} else if (this.base.scheme === "file") {
this.state = "file";
--this.pointer;
} else {
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "relative";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
if (c === 47) {
this.state = "authority";
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
this.url.scheme = this.base.scheme;
if (isNaN(c)) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 47) {
this.state = "relative slash";
} else if (c === 63) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else if (isSpecial(this.url) && c === 92) {
this.parseError = true;
this.state = "relative slash";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.url.path = this.base.path.slice(0, this.base.path.length - 1);
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
if (isSpecial(this.url) && (c === 47 || c === 92)) {
if (c === 92) {
this.parseError = true;
}
this.state = "special authority ignore slashes";
} else if (c === 47) {
this.state = "authority";
} else {
this.url.username = this.base.username;
this.url.password = this.base.password;
this.url.host = this.base.host;
this.url.port = this.base.port;
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
if (c === 47 && this.input[this.pointer + 1] === 47) {
this.state = "special authority ignore slashes";
++this.pointer;
} else {
this.parseError = true;
this.state = "special authority ignore slashes";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
if (c !== 47 && c !== 92) {
this.state = "authority";
--this.pointer;
} else {
this.parseError = true;
}
return true;
};
URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
if (c === 64) {
this.parseError = true;
if (this.atFlag) {
this.buffer = "%40" + this.buffer;
}
this.atFlag = true;
// careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
const len = countSymbols(this.buffer);
for (let pointer = 0; pointer < len; ++pointer) {
const codePoint = this.buffer.codePointAt(pointer);
if (codePoint === 58 && !this.passwordTokenSeenFlag) {
this.passwordTokenSeenFlag = true;
continue;
}
const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
if (this.passwordTokenSeenFlag) {
this.url.password += encodedCodePoints;
} else {
this.url.username += encodedCodePoints;
}
}
this.buffer = "";
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
(isSpecial(this.url) && c === 92)) {
if (this.atFlag && this.buffer === "") {
this.parseError = true;
return failure;
}
this.pointer -= countSymbols(this.buffer) + 1;
this.buffer = "";
this.state = "host";
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse hostname"] =
URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
if (this.stateOverride && this.url.scheme === "file") {
--this.pointer;
this.state = "file host";
} else if (c === 58 && !this.arrFlag) {
if (this.buffer === "") {
this.parseError = true;
return failure;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "port";
if (this.stateOverride === "hostname") {
return false;
}
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
(isSpecial(this.url) && c === 92)) {
--this.pointer;
if (isSpecial(this.url) && this.buffer === "") {
this.parseError = true;
return failure;
} else if (this.stateOverride && this.buffer === "" &&
(includesCredentials(this.url) || this.url.port !== null)) {
this.parseError = true;
return false;
}
const host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
this.url.host = host;
this.buffer = "";
this.state = "path start";
if (this.stateOverride) {
return false;
}
} else {
if (c === 91) {
this.arrFlag = true;
} else if (c === 93) {
this.arrFlag = false;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
if (isASCIIDigit(c)) {
this.buffer += cStr;
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
(isSpecial(this.url) && c === 92) ||
this.stateOverride) {
if (this.buffer !== "") {
const port = parseInt(this.buffer);
if (port > Math.pow(2, 16) - 1) {
this.parseError = true;
return failure;
}
this.url.port = port === defaultPort(this.url.scheme) ? null : port;
this.buffer = "";
}
if (this.stateOverride) {
return false;
}
this.state = "path start";
--this.pointer;
} else {
this.parseError = true;
return failure;
}
return true;
};
const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
URLStateMachine.prototype["parse file"] = function parseFile(c) {
this.url.scheme = "file";
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file slash";
} else if (this.base !== null && this.base.scheme === "file") {
if (isNaN(c)) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
} else if (c === 63) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
this.url.query = this.base.query;
this.url.fragment = "";
this.state = "fragment";
} else {
if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points
!isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||
(this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points
!fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {
this.url.host = this.base.host;
this.url.path = this.base.path.slice();
shortenPath(this.url);
} else {
this.parseError = true;
}
this.state = "path";
--this.pointer;
}
} else {
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
if (c === 47 || c === 92) {
if (c === 92) {
this.parseError = true;
}
this.state = "file host";
} else {
if (this.base !== null && this.base.scheme === "file") {
if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
this.url.path.push(this.base.path[0]);
} else {
this.url.host = this.base.host;
}
}
this.state = "path";
--this.pointer;
}
return true;
};
URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
--this.pointer;
if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
this.parseError = true;
this.state = "path";
} else if (this.buffer === "") {
this.url.host = "";
if (this.stateOverride) {
return false;
}
this.state = "path start";
} else {
let host = parseHost(this.buffer, isSpecial(this.url));
if (host === failure) {
return failure;
}
if (host === "localhost") {
host = "";
}
this.url.host = host;
if (this.stateOverride) {
return false;
}
this.buffer = "";
this.state = "path start";
}
} else {
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
if (isSpecial(this.url)) {
if (c === 92) {
this.parseError = true;
}
this.state = "path";
if (c !== 47 && c !== 92) {
--this.pointer;
}
} else if (!this.stateOverride && c === 63) {
this.url.query = "";
this.state = "query";
} else if (!this.stateOverride && c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else if (c !== undefined) {
this.state = "path";
if (c !== 47) {
--this.pointer;
}
}
return true;
};
URLStateMachine.prototype["parse path"] = function parsePath(c) {
if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
(!this.stateOverride && (c === 63 || c === 35))) {
if (isSpecial(this.url) && c === 92) {
this.parseError = true;
}
if (isDoubleDot(this.buffer)) {
shortenPath(this.url);
if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
}
} else if (isSingleDot(this.buffer) && c !== 47 &&
!(isSpecial(this.url) && c === 92)) {
this.url.path.push("");
} else if (!isSingleDot(this.buffer)) {
if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
if (this.url.host !== "" && this.url.host !== null) {
this.parseError = true;
this.url.host = "";
}
this.buffer = this.buffer[0] + ":";
}
this.url.path.push(this.buffer);
}
this.buffer = "";
if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
while (this.url.path.length > 1 && this.url.path[0] === "") {
this.parseError = true;
this.url.path.shift();
}
}
if (c === 63) {
this.url.query = "";
this.state = "query";
}
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 &&
(!isASCIIHex(this.input[this.pointer + 1]) ||
!isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += percentEncodeChar(c, isPathPercentEncode);
}
return true;
};
URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
if (c === 63) {
this.url.query = "";
this.state = "query";
} else if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
} else {
// TODO: Add: not a URL code point
if (!isNaN(c) && c !== 37) {
this.parseError = true;
}
if (c === 37 &&
(!isASCIIHex(this.input[this.pointer + 1]) ||
!isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
if (!isNaN(c)) {
this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
}
}
return true;
};
URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
if (isNaN(c) || (!this.stateOverride && c === 35)) {
if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
this.encodingOverride = "utf-8";
}
const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
for (let i = 0; i < buffer.length; ++i) {
if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||
buffer[i] === 0x3C || buffer[i] === 0x3E) {
this.url.query += percentEncode(buffer[i]);
} else {
this.url.query += String.fromCodePoint(buffer[i]);
}
}
this.buffer = "";
if (c === 35) {
this.url.fragment = "";
this.state = "fragment";
}
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 &&
(!isASCIIHex(this.input[this.pointer + 1]) ||
!isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.buffer += cStr;
}
return true;
};
URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
if (isNaN(c)) { // do nothing
} else if (c === 0x0) {
this.parseError = true;
} else {
// TODO: If c is not a URL code point and not "%", parse error.
if (c === 37 &&
(!isASCIIHex(this.input[this.pointer + 1]) ||
!isASCIIHex(this.input[this.pointer + 2]))) {
this.parseError = true;
}
this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
}
return true;
};
function serializeURL(url, excludeFragment) {
let output = url.scheme + ":";
if (url.host !== null) {
output += "//";
if (url.username !== "" || url.password !== "") {
output += url.username;
if (url.password !== "") {
output += ":" + url.password;
}
output += "@";
}
output += serializeHost(url.host);
if (url.port !== null) {
output += ":" + url.port;
}
} else if (url.host === null && url.scheme === "file") {
output += "//";
}
if (url.cannotBeABaseURL) {
output += url.path[0];
} else {
for (const string of url.path) {
output += "/" + string;
}
}
if (url.query !== null) {
output += "?" + url.query;
}
if (!excludeFragment && url.fragment !== null) {
output += "#" + url.fragment;
}
return output;
}
function serializeOrigin(tuple) {
let result = tuple.scheme + "://";
result += serializeHost(tuple.host);
if (tuple.port !== null) {
result += ":" + tuple.port;
}
return result;
}
module.exports.serializeURL = serializeURL;
module.exports.serializeURLOrigin = function (url) {
// https://url.spec.whatwg.org/#concept-url-origin
switch (url.scheme) {
case "blob":
try {
return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
} catch (e) {
// serializing an opaque origin returns "null"
return "null";
}
case "ftp":
case "gopher":
case "http":
case "https":
case "ws":
case "wss":
return serializeOrigin({
scheme: url.scheme,
host: url.host,
port: url.port
});
case "file":
// spec says "exercise to the reader", chrome says "file://"
return "file://";
default:
// serializing an opaque origin returns "null"
return "null";
}
};
module.exports.basicURLParse = function (input, options) {
if (options === undefined) {
options = {};
}
const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
if (usm.failure) {
return "failure";
}
return usm.url;
};
module.exports.setTheUsername = function (url, username) {
url.username = "";
const decoded = punycode.ucs2.decode(username);
for (let i = 0; i < decoded.length; ++i) {
url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.setThePassword = function (url, password) {
url.password = "";
const decoded = punycode.ucs2.decode(password);
for (let i = 0; i < decoded.length; ++i) {
url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
}
};
module.exports.serializeHost = serializeHost;
module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
module.exports.serializeInteger = function (integer) {
return String(integer);
};
module.exports.parseURL = function (input, options) {
if (options === undefined) {
options = {};
}
// We don't handle blobs, so this just delegates:
return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
};
2021-01-08 20:47:49 +00:00
/***/ }),
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ 3185:
/***/ ((module) => {
2021-01-08 20:47:49 +00:00
"use strict";
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
module.exports.mixin = function mixin(target, source) {
const keys = Object.getOwnPropertyNames(source);
for (let i = 0; i < keys.length; ++i) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
};
module.exports.wrapperSymbol = Symbol("wrapper");
module.exports.implSymbol = Symbol("impl");
module.exports.wrapperForImpl = function (impl) {
return impl[module.exports.wrapperSymbol];
};
module.exports.implForWrapper = function (wrapper) {
return wrapper[module.exports.implSymbol];
};
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 2940:
/***/ ((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
}
}
/***/ }),
/***/ 4570:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
const core = __nccwpck_require__(2186)
const yaml = __nccwpck_require__(1917)
2021-04-16 13:23:55 +00:00
const fs = __nccwpck_require__(5630)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
const { getInput } = __nccwpck_require__(4623)
2021-01-08 20:47:49 +00:00
const REPLACE_DEFAULT = true
const DELETE_ORPHANED_DEFAULT = false
let context
2021-01-08 20:47:49 +00:00
try {
2021-09-04 13:04:09 +00:00
let isInstallationToken = false
let token = getInput({
key: 'GH_PAT'
})
if (!token) {
token = getInput({
key: 'GH_INSTALLATION_TOKEN'
})
isInstallationToken = true
if (!token) {
core.setFailed('You must provide either GH_PAT or GH_INSTALLATION_TOKEN')
process.exit(1)
}
}
context = {
2021-09-04 13:04:09 +00:00
GITHUB_TOKEN: token,
IS_INSTALLATION_TOKEN: isInstallationToken,
GIT_EMAIL: getInput({
key: 'GIT_EMAIL'
}),
GIT_USERNAME: getInput({
key: 'GIT_USERNAME'
}),
CONFIG_PATH: getInput({
key: 'CONFIG_PATH',
default: '.github/sync.yml'
}),
COMMIT_BODY: getInput({
key: 'COMMIT_BODY',
default: ''
}),
COMMIT_PREFIX: getInput({
key: 'COMMIT_PREFIX',
default: '🔄'
}),
COMMIT_EACH_FILE: getInput({
key: 'COMMIT_EACH_FILE',
type: 'boolean',
default: true
}),
PR_LABELS: getInput({
key: 'PR_LABELS',
default: [ 'sync' ],
type: 'array',
disableable: true
}),
2021-08-11 20:52:48 +00:00
PR_BODY: getInput({
key: 'PR_BODY',
default: ''
}),
ASSIGNEES: getInput({
key: 'ASSIGNEES',
type: 'array'
}),
REVIEWERS: getInput({
key: 'REVIEWERS',
type: 'array'
}),
TEAM_REVIEWERS: getInput({
key: 'TEAM_REVIEWERS',
type: 'array'
}),
TMP_DIR: getInput({
key: 'TMP_DIR',
default: `tmp-${ Date.now().toString() }`
}),
DRY_RUN: getInput({
key: 'DRY_RUN',
type: 'boolean',
default: false
}),
SKIP_CLEANUP: getInput({
key: 'SKIP_CLEANUP',
type: 'boolean',
default: false
}),
OVERWRITE_EXISTING_PR: getInput({
key: 'OVERWRITE_EXISTING_PR',
type: 'boolean',
default: true
}),
GITHUB_REPOSITORY: getInput({
key: 'GITHUB_REPOSITORY',
required: true
}),
SKIP_PR: getInput({
key: 'SKIP_PR',
type: 'boolean',
default: false
}),
2021-09-04 13:50:56 +00:00
ORIGINAL_MESSAGE: getInput({
key: 'ORIGINAL_MESSAGE',
type: 'boolean',
default: false
}),
2021-09-27 14:22:23 +00:00
COMMIT_AS_PR_TITLE: getInput({
key: 'COMMIT_AS_PR_TITLE',
type: 'boolean',
default: false
}),
BRANCH_PREFIX: getInput({
key: 'BRANCH_PREFIX',
default: 'repo-sync/SOURCE_REPO_NAME'
}),
FORK: getInput({
2021-12-11 13:19:00 +00:00
key: 'FORK',
default: false,
disableable: true
})
2021-01-10 15:59:11 +00:00
}
core.setSecret(context.GITHUB_TOKEN)
core.debug(JSON.stringify(context, null, 2))
2021-01-10 15:59:11 +00:00
while (fs.existsSync(context.TMP_DIR)) {
context.TMP_DIR = `tmp-${ Date.now().toString() }`
core.warning(`TEMP_DIR already exists. Using "${ context.TMP_DIR }" now.`)
2021-01-10 15:59:11 +00:00
}
2021-01-08 20:47:49 +00:00
} catch (err) {
core.setFailed(err.message)
process.exit(1)
2021-01-08 20:47:49 +00:00
}
const parseRepoName = (fullRepo) => {
let host = 'github.com'
if (fullRepo.startsWith('http')) {
const url = new URL(fullRepo)
host = url.host
fullRepo = url.pathname.replace(/^\/+/, '') // Remove leading slash
core.info('Using custom host')
}
2021-01-08 20:47:49 +00:00
const user = fullRepo.split('/')[0]
const name = fullRepo.split('/')[1].split('@')[0]
const branch = fullRepo.split('@')[1] || 'default'
2021-01-08 20:47:49 +00:00
return {
fullName: `${ host }/${ user }/${ name }`,
2021-06-02 10:03:23 +00:00
uniqueName: `${ host }/${ user }/${ name }@${ branch }`,
host,
2021-01-08 20:47:49 +00:00
user,
name,
branch
}
}
2021-04-16 13:23:55 +00:00
const parseExclude = (text, src) => {
if (text === undefined || typeof text !== 'string') return undefined
const files = text.split('\n').filter((i) => i)
return files.map((file) => path.join(src, file))
}
2021-01-08 20:47:49 +00:00
const parseFiles = (files) => {
return files.map((item) => {
if (typeof item === 'string') {
return {
source: item,
dest: item,
replace: REPLACE_DEFAULT,
deleteOrphaned: DELETE_ORPHANED_DEFAULT
2021-01-08 20:47:49 +00:00
}
}
if (item.source !== undefined) {
return {
source: item.source,
dest: item.dest || item.source,
replace: item.replace === undefined ? REPLACE_DEFAULT : item.replace,
deleteOrphaned: item.deleteOrphaned === undefined ? DELETE_ORPHANED_DEFAULT : item.deleteOrphaned,
2021-04-16 13:23:55 +00:00
exclude: parseExclude(item.exclude, item.source)
2021-01-08 20:47:49 +00:00
}
}
2021-04-30 08:52:48 +00:00
core.warning('Warn: No source files specified')
2021-01-08 20:47:49 +00:00
})
}
const parseConfig = async () => {
const fileContent = await fs.promises.readFile(context.CONFIG_PATH)
const configObject = yaml.load(fileContent.toString())
2021-01-08 20:47:49 +00:00
2021-01-09 13:55:19 +00:00
const result = {}
2021-01-08 20:47:49 +00:00
Object.keys(configObject).forEach((key) => {
if (key === 'group') {
2021-01-09 13:55:19 +00:00
const rawObject = configObject[key]
const groups = Array.isArray(rawObject) ? rawObject : [ rawObject ]
groups.forEach((group) => {
2021-09-17 10:25:33 +00:00
const repos = typeof group.repos === 'string' ? group.repos.split('\n').map((n) => n.trim()).filter((n) => n) : group.repos
2021-01-09 13:55:19 +00:00
repos.forEach((name) => {
const files = parseFiles(group.files)
const repo = parseRepoName(name)
2021-06-02 10:03:23 +00:00
if (result[repo.uniqueName] !== undefined) {
result[repo.uniqueName].files.push(...files)
2021-01-09 13:55:19 +00:00
return
}
2021-06-02 10:03:23 +00:00
result[repo.uniqueName] = {
2021-01-09 13:55:19 +00:00
repo,
files
}
2021-01-08 20:47:49 +00:00
})
})
} else {
const files = parseFiles(configObject[key])
2021-01-09 13:55:19 +00:00
const repo = parseRepoName(key)
2021-06-02 10:03:23 +00:00
if (result[repo.uniqueName] !== undefined) {
result[repo.uniqueName].files.push(...files)
2021-01-09 13:55:19 +00:00
return
}
2021-06-02 10:03:23 +00:00
result[repo.uniqueName] = {
2021-01-09 13:55:19 +00:00
repo,
2021-01-08 20:47:49 +00:00
files
2021-01-09 13:55:19 +00:00
}
2021-01-08 20:47:49 +00:00
}
})
2021-01-09 13:55:19 +00:00
return Object.values(result)
2021-01-08 20:47:49 +00:00
}
module.exports = {
...context,
parseConfig
}
/***/ }),
/***/ 109:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
const { parse } = __nccwpck_require__(1150)
const core = __nccwpck_require__(2186)
2021-09-04 13:50:56 +00:00
const github = __nccwpck_require__(5438)
const { GitHub, getOctokitOptions } = __nccwpck_require__(3030)
const { throttling } = __nccwpck_require__(9968)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
2022-02-19 10:24:46 +00:00
const fs = __nccwpck_require__(7147)
2021-01-08 20:47:49 +00:00
const {
GITHUB_TOKEN,
2021-09-04 13:04:09 +00:00
IS_INSTALLATION_TOKEN,
2021-01-08 20:47:49 +00:00
GIT_USERNAME,
GIT_EMAIL,
TMP_DIR,
COMMIT_BODY,
2021-01-08 20:47:49 +00:00
COMMIT_PREFIX,
GITHUB_REPOSITORY,
2021-04-30 08:39:02 +00:00
OVERWRITE_EXISTING_PR,
2021-08-11 20:52:48 +00:00
PR_BODY,
BRANCH_PREFIX,
FORK
2021-01-08 20:47:49 +00:00
} = __nccwpck_require__(4570)
2021-03-07 22:51:11 +00:00
const { dedent, execCmd } = __nccwpck_require__(8505)
2021-01-08 20:47:49 +00:00
class Git {
constructor() {
const Octokit = GitHub.plugin(throttling)
const options = getOctokitOptions(GITHUB_TOKEN, {
throttle: {
onRateLimit: (retryAfter) => {
core.debug(`Hit GitHub API rate limit, retrying after ${ retryAfter }s`)
return true
},
onSecondaryRateLimit: (retryAfter) => {
core.debug(`Hit secondary GitHub API rate limit, retrying after ${ retryAfter }s`)
return true
}
}
})
const octokit = new Octokit(options)
// We only need the rest client
this.github = octokit.rest
}
async initRepo(repo) {
// Reset repo specific values
this.existingPr = undefined
this.prBranch = undefined
this.baseBranch = undefined
// Set values to current repo
this.repo = repo
2021-06-02 10:03:23 +00:00
this.workingDir = path.join(TMP_DIR, repo.uniqueName)
2021-09-04 13:04:09 +00:00
this.gitUrl = `https://${ IS_INSTALLATION_TOKEN ? 'x-access-token:' : '' }${ GITHUB_TOKEN }@${ repo.fullName }.git`
await this.clone()
await this.setIdentity()
await this.getBaseBranch()
await this.getLastCommitSha()
if (FORK) {
const forkUrl = `https://${ GITHUB_TOKEN }@github.com/${ FORK }/${ this.repo.name }.git`
await this.createFork()
await this.createRemote(forkUrl)
}
}
async createFork() {
core.debug(`Creating fork with OWNER: ${ this.repo.user } and REPO: ${ this.repo.name }`)
await this.github.repos.createFork({
owner: this.repo.user,
repo: this.repo.name
})
}
async createRemote(forkUrl) {
return execCmd(
`git remote add fork ${ forkUrl }`,
this.workingDir
)
}
2021-01-08 20:47:49 +00:00
async clone() {
core.debug(`Cloning ${ this.repo.fullName } into ${ this.workingDir }`)
2021-01-08 20:47:49 +00:00
return execCmd(
`git clone --depth 1 ${ this.repo.branch !== 'default' ? '--branch "' + this.repo.branch + '"' : '' } ${ this.gitUrl } ${ this.workingDir }`
2021-01-08 20:47:49 +00:00
)
}
async setIdentity() {
2021-01-08 20:47:49 +00:00
let username = GIT_USERNAME
let email = GIT_EMAIL
if (email === undefined) {
if (!IS_INSTALLATION_TOKEN) {
const { data } = await this.github.users.getAuthenticated()
email = data.email
username = data.login
2021-09-04 13:04:09 +00:00
}
2021-01-08 20:47:49 +00:00
}
core.debug(`Setting git user to email: ${ email }, username: ${ username }`)
2021-01-08 20:47:49 +00:00
return execCmd(
`git config --local user.name "${ username }" && git config --local user.email "${ email }"`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
async getBaseBranch() {
this.baseBranch = await execCmd(
2021-01-08 20:47:49 +00:00
`git rev-parse --abbrev-ref HEAD`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
async createPrBranch() {
2021-04-30 08:39:02 +00:00
const prefix = BRANCH_PREFIX.replace('SOURCE_REPO_NAME', GITHUB_REPOSITORY.split('/')[1])
let newBranch = path.join(prefix, this.repo.branch).replace(/\\/g, '/')
if (OVERWRITE_EXISTING_PR === false) {
newBranch += `-${ Math.round((new Date()).getTime() / 1000) }`
}
2021-01-08 20:47:49 +00:00
core.debug(`Creating PR Branch ${ newBranch }`)
2021-01-08 20:47:49 +00:00
await execCmd(
`git checkout -b "${ newBranch }"`,
this.workingDir
)
this.prBranch = newBranch
2021-01-08 20:47:49 +00:00
}
async add(file) {
2021-01-08 20:47:49 +00:00
return execCmd(
`git add -f "${ file }"`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
2021-09-04 13:50:56 +00:00
isOneCommitPush() {
return github.context.eventName === 'push' && github.context.payload.commits.length === 1
}
originalCommitMessage() {
return github.context.payload.commits[0].message
}
parseGitDiffOutput(string) { // parses git diff output and returns a dictionary mapping the file path to the diff output for this file
// split diff into separate entries for separate files. \ndiff --git should be a reliable way to detect the separation, as content of files is always indented
return `\n${ string }`.split('\ndiff --git').slice(1).reduce((resultDict, fileDiff) => {
const lines = fileDiff.split('\n')
const lastHeaderLineIndex = lines.findIndex((line) => line.startsWith('+++'))
const plainDiff = lines.slice(lastHeaderLineIndex + 1).join('\n').trim()
let filePath = ''
if (lines[lastHeaderLineIndex].startsWith('+++ b/')) { // every file except removed files
filePath = lines[lastHeaderLineIndex].slice(6) // remove '+++ b/'
} else { // for removed file need to use header line with filename before deletion
filePath = lines[lastHeaderLineIndex - 1].slice(6) // remove '--- a/'
}
return { ...resultDict, [filePath]: plainDiff }
}, {})
}
async getChangesFromLastCommit(source) { // gets array of git diffs for the source, which either can be a file or a dict
if (this.lastCommitChanges === undefined) {
const diff = await this.github.repos.compareCommits({
mediaType: {
format: 'diff'
},
owner: github.context.payload.repository.owner.name,
repo: github.context.payload.repository.name,
base: github.context.payload.before,
head: github.context.payload.after
})
this.lastCommitChanges = this.parseGitDiffOutput(diff.data)
}
if (source.endsWith('/')) {
return Object.keys(this.lastCommitChanges).filter((filePath) => filePath.startsWith(source)).reduce((result, key) => [ ...result, this.lastCommitChanges[key] ], [])
} else {
return this.lastCommitChanges[source] === undefined ? [] : [ this.lastCommitChanges[source] ]
}
}
2022-02-19 10:24:46 +00:00
async getBlobBase64Content(file) {
const fileRelativePath = path.join(this.workingDir, file)
const fileContent = await fs.promises.readFile(fileRelativePath)
return fileContent.toString('base64')
}
async getLastCommitSha() {
this.lastCommitSha = await execCmd(
`git rev-parse HEAD`,
this.workingDir
)
}
2021-09-04 13:50:56 +00:00
async changes(destination) { // gets array of git diffs for the destination, which either can be a file or a dict
const output = await execCmd(
`git diff HEAD ${ destination }`,
this.workingDir
)
return Object.values(this.parseGitDiffOutput(output))
}
async hasChanges() {
2021-01-08 20:47:49 +00:00
const statusOutput = await execCmd(
`git status --porcelain`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
2021-01-08 20:47:49 +00:00
return parse(statusOutput).length !== 0
}
async commit(msg) {
let message = msg !== undefined ? msg : `${ COMMIT_PREFIX } Synced file(s) with ${ GITHUB_REPOSITORY }`
if (COMMIT_BODY) {
message += `\n\n${ COMMIT_BODY }`
}
2021-01-08 20:47:49 +00:00
return execCmd(
`git commit -m '${ message.replace(/'/g, '\'\\\'\'') }'`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
2022-02-19 10:24:46 +00:00
// Returns a git tree parsed for the specified commit sha
async getTree(commitSha) {
const output = await execCmd(
`git ls-tree -r --full-tree ${ commitSha }`,
this.workingDir
)
const tree = []
for (const treeObject of output.split('\n')) {
const [ mode, type, sha ] = treeObject.split(/\s/)
2022-02-19 10:24:46 +00:00
const file = treeObject.split('\t')[1]
const treeEntry = {
mode,
type,
2022-02-19 10:24:46 +00:00
sha,
path: file
}
2022-02-19 10:24:46 +00:00
tree.push(treeEntry)
}
2022-02-19 10:24:46 +00:00
return tree
}
2022-02-19 10:24:46 +00:00
// Creates the blob objects in GitHub for the files that are not in the previous commit only
async createGithubBlobs(commitSha) {
core.debug('Creating missing blobs on GitHub')
const [ previousTree, tree ] = await Promise.all([ this.getTree(`${ commitSha }~1`), this.getTree(commitSha) ])
const promisesGithubCreateBlobs = []
for (const treeEntry of tree) {
// If the current treeEntry are in the previous tree, that means that the blob is uploaded and it doesn't need to be uploaded to GitHub again.
if (previousTree.findIndex((entry) => entry.sha === treeEntry.sha) !== -1) {
continue
}
const base64Content = await this.getBlobBase64Content(treeEntry.path)
// Creates the blob. We don't need to store the response because the local sha is the same and we can use it to reference the blob
const githubCreateBlobRequest = this.github.git.createBlob({
owner: this.repo.user,
repo: this.repo.name,
content: base64Content,
encoding: 'base64'
})
promisesGithubCreateBlobs.push(githubCreateBlobRequest)
}
// Wait for all the file uploads to be completed
await Promise.all(promisesGithubCreateBlobs)
}
// Gets the commit list in chronological order
async getCommitsToPush() {
const output = await execCmd(
`git log --format=%H --reverse ${ this.baseBranch }..HEAD`,
this.workingDir
)
const commits = output.split('\n')
return commits
}
async getCommitMessage(commitSha) {
return await execCmd(
`git log -1 --format=%B ${ commitSha }`,
this.workingDir
)
}
// Returns an array of objects with the git tree and the commit, one entry for each pending commit to push
async getCommitsDataToPush() {
const commitsToPush = await this.getCommitsToPush()
const commitsData = []
for (const commitSha of commitsToPush) {
2022-02-19 10:24:46 +00:00
const [ commitMessage, tree ] = await Promise.all([ this.getCommitMessage(commitSha), this.getTree(commitSha), this.createGithubBlobs(commitSha) ])
const commitData = {
2022-02-19 10:24:46 +00:00
commitMessage,
tree
}
commitsData.push(commitData)
}
return commitsData
}
// A wrapper for running all the flow to generate all the pending commits using the GitHub API
async createGithubVerifiedCommits() {
const commitsData = await this.getCommitsDataToPush()
// Creates the PR branch if doesn't exists
try {
await this.github.git.createRef({
owner: this.repo.user,
repo: this.repo.name,
sha: this.lastCommitSha,
ref: 'refs/heads/' + this.prBranch
})
core.debug(`Created new branch ${ this.prBranch }`)
} catch (error) {
// If the branch exists ignores the error
if (error.message !== 'Reference already exists') throw error
}
for (const commitData of commitsData) {
await this.createGithubTreeAndCommit(commitData.tree, commitData.commitMessage)
}
core.debug(`Updating branch ${ this.prBranch } ref`)
await this.github.git.updateRef({
owner: this.repo.user,
repo: this.repo.name,
ref: `heads/${ this.prBranch }`,
sha: this.lastCommitSha,
force: true
})
core.debug(`Commit using GitHub API completed`)
}
async status() {
2021-01-08 20:47:49 +00:00
return execCmd(
`git status`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
async push() {
if (FORK) {
return execCmd(
`git push -u fork ${ this.prBranch } --force`,
this.workingDir
)
}
if (IS_INSTALLATION_TOKEN) {
return await this.createGithubVerifiedCommits()
}
2021-01-08 20:47:49 +00:00
return execCmd(
`git push ${ this.gitUrl } --force`,
this.workingDir
2021-01-08 20:47:49 +00:00
)
}
async findExistingPr() {
const { data } = await this.github.pulls.list({
owner: this.repo.user,
repo: this.repo.name,
state: 'open',
head: `${ FORK ? FORK : this.repo.user }:${ this.prBranch }`
})
this.existingPr = data[0]
return this.existingPr
}
async setPrWarning() {
await this.github.pulls.update({
owner: this.repo.user,
repo: this.repo.name,
pull_number: this.existingPr.number,
body: dedent(`
This PR is being automatically resynced
${ this.existingPr.body }
`)
})
}
async removePrWarning() {
await this.github.pulls.update({
owner: this.repo.user,
repo: this.repo.name,
pull_number: this.existingPr.number,
body: this.existingPr.body.replace('⚠️ This PR is being automatically resynced ⚠️', '')
})
}
2021-09-27 14:22:23 +00:00
async createOrUpdatePr(changedFiles, title) {
const body = dedent(`
Synced local file(s) with [${ GITHUB_REPOSITORY }](https://github.com/${ GITHUB_REPOSITORY }).
2021-08-11 20:52:48 +00:00
${ PR_BODY }
${ changedFiles }
---
This PR was created automatically by the [repo-file-sync-action](https://github.com/BetaHuhn/repo-file-sync-action) workflow run [#${ process.env.GITHUB_RUN_ID || 0 }](https://github.com/${ GITHUB_REPOSITORY }/actions/runs/${ process.env.GITHUB_RUN_ID || 0 })
`)
if (this.existingPr) {
core.info(`Overwriting existing PR`)
const { data } = await this.github.pulls.update({
owner: this.repo.user,
repo: this.repo.name,
2021-09-27 14:22:23 +00:00
title: `${ COMMIT_PREFIX } Synced file(s) with ${ GITHUB_REPOSITORY }`,
pull_number: this.existingPr.number,
body: body
})
return data
}
core.info(`Creating new PR`)
const { data } = await this.github.pulls.create({
owner: this.repo.user,
repo: this.repo.name,
2021-09-27 14:22:23 +00:00
title: title === undefined ? `${ COMMIT_PREFIX } Synced file(s) with ${ GITHUB_REPOSITORY }` : title,
body: body,
head: `${ FORK ? FORK : this.repo.user }:${ this.prBranch }`,
base: this.baseBranch
})
this.existingPr = data
return data
}
async addPrLabels(labels) {
await this.github.issues.addLabels({
owner: this.repo.user,
repo: this.repo.name,
issue_number: this.existingPr.number,
labels: labels
})
2021-01-08 20:47:49 +00:00
}
async addPrAssignees(assignees) {
await this.github.issues.addAssignees({
owner: this.repo.user,
repo: this.repo.name,
issue_number: this.existingPr.number,
assignees: assignees
})
}
async addPrReviewers(reviewers) {
await this.github.pulls.requestReviewers({
owner: this.repo.user,
repo: this.repo.name,
pull_number: this.existingPr.number,
reviewers: reviewers
})
}
async addPrTeamReviewers(reviewers) {
await this.github.pulls.requestReviewers({
owner: this.repo.user,
repo: this.repo.name,
pull_number: this.existingPr.number,
team_reviewers: reviewers
})
}
async createGithubTreeAndCommit(tree, commitMessage) {
core.debug(`Creating a GitHub tree`)
let treeSha
try {
const request = await this.github.git.createTree({
owner: this.repo.user,
repo: this.repo.name,
tree
})
treeSha = request.data.sha
} catch (error) {
error.message = `Cannot create a new GitHub Tree: ${ error.message }`
throw error
}
core.debug(`Creating a commit for the GitHub tree`)
const request = await this.github.git.createCommit({
owner: this.repo.user,
repo: this.repo.name,
message: commitMessage,
parents: [ this.lastCommitSha ],
tree: treeSha
})
this.lastCommitSha = request.data.sha
}
2021-01-08 20:47:49 +00:00
}
module.exports = Git
2021-01-08 20:47:49 +00:00
/***/ }),
/***/ 8505:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
2021-04-16 13:23:55 +00:00
const fs = __nccwpck_require__(5630)
const readfiles = __nccwpck_require__(5884)
2021-12-19 20:39:50 +00:00
const { exec } = __nccwpck_require__(2081)
2021-03-07 22:51:11 +00:00
const core = __nccwpck_require__(2186)
2021-12-19 20:39:50 +00:00
const path = __nccwpck_require__(1017)
2021-01-08 20:47:49 +00:00
// From https://github.com/toniov/p-iteration/blob/master/lib/static-methods.js - MIT © Antonio V
const forEach = async (array, callback) => {
for (let index = 0; index < array.length; index++) {
// eslint-disable-next-line callback-return
await callback(array[index], index, array)
}
}
// From https://github.com/MartinKolarik/dedent-js/blob/master/src/index.ts - MIT © 2015 Martin Kolárik
2021-01-08 20:47:49 +00:00
const dedent = function(templateStrings, ...values) {
const matches = []
const strings = typeof templateStrings === 'string' ? [ templateStrings ] : templateStrings.slice()
strings[strings.length - 1] = strings[strings.length - 1].replace(/\r?\n([\t ]*)$/, '')
for (let i = 0; i < strings.length; i++) {
let match
// eslint-disable-next-line no-cond-assign
if (match = strings[i].match(/\n[\t ]+/g)) {
matches.push(...match)
}
}
if (matches.length) {
const size = Math.min(...matches.map((value) => value.length - 1))
const pattern = new RegExp(`\n[\t ]{${ size }}`, 'g')
for (let i = 0; i < strings.length; i++) {
strings[i] = strings[i].replace(pattern, '\n')
}
}
strings[0] = strings[0].replace(/^\r?\n/, '')
let string = strings[0]
for (let i = 0; i < values.length; i++) {
string += values[i] + strings[i + 1]
}
return string
}
const execCmd = (command, workingDir, trimResult = true) => {
2021-03-07 22:51:11 +00:00
core.debug(`EXEC: "${ command }" IN ${ workingDir }`)
return new Promise((resolve, reject) => {
exec(
command,
{
cwd: workingDir
},
function(error, stdout) {
error ? reject(error) : resolve(
trimResult ? stdout.trim() : stdout
)
2021-03-07 22:51:11 +00:00
}
)
})
}
const addTrailingSlash = (str) => str.endsWith('/') ? str : str + '/'
const pathIsDirectory = async (path) => {
2021-04-16 13:23:55 +00:00
const stat = await fs.lstat(path)
return stat.isDirectory()
}
const copy = async (src, dest, deleteOrphaned, exclude) => {
2021-04-16 13:23:55 +00:00
core.debug(`CP: ${ src } TO ${ dest }`)
const filterFunc = (file) => {
2021-09-23 16:11:36 +00:00
if (exclude !== undefined && exclude.includes(file)) {
2021-04-16 13:23:55 +00:00
core.debug(`Excluding file ${ file }`)
return false
}
return true
}
await fs.copy(src, dest, exclude !== undefined && { filter: filterFunc })
// If it is a directory and deleteOrphaned is enabled - check if there are any files that were removed from source dir and remove them in destination dir
if (deleteOrphaned) {
const srcFileList = await readfiles(src, { readContents: false, hidden: true })
const destFileList = await readfiles(dest, { readContents: false, hidden: true })
for (const file of destFileList) {
if (srcFileList.indexOf(file) === -1) {
2021-12-22 14:29:17 +00:00
const filePath = path.join(dest, file)
core.debug(`Found a orphaned file in the target repo - ${ filePath }`)
2021-09-23 16:11:36 +00:00
if (exclude !== undefined && exclude.includes(path.join(src, file))) {
2021-09-06 15:40:19 +00:00
core.debug(`Excluding file ${ file }`)
} else {
2021-12-22 14:29:17 +00:00
core.debug(`Removing file ${ file }`)
await fs.remove(filePath)
2021-09-06 15:40:19 +00:00
}
}
}
}
2021-04-16 13:23:55 +00:00
}
const remove = async (src) => {
core.debug(`RM: ${ src }`)
return fs.remove(src)
}
2021-09-04 13:50:56 +00:00
const arrayEquals = (array1, array2) => Array.isArray(array1) && Array.isArray(array2) && array1.length === array2.length && array1.every((value, i) => value === array2[i])
2021-01-08 20:47:49 +00:00
module.exports = {
forEach,
dedent,
addTrailingSlash,
2021-03-07 22:51:11 +00:00
pathIsDirectory,
2021-04-16 13:23:55 +00:00
execCmd,
copy,
2021-09-04 13:50:56 +00:00
remove,
arrayEquals
2021-01-08 20:47:49 +00:00
}
/***/ }),
2021-05-05 07:42:20 +00:00
/***/ 2877:
/***/ ((module) => {
module.exports = eval("require")("encoding");
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 9491:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("assert");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 2081:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("child_process");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 2057:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("constants");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 2361:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("events");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 7147:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("fs");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 3685:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("http");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 5687:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("https");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 1808:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("net");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 2037:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("os");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 1017:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("path");
2021-05-05 07:42:20 +00:00
/***/ }),
2022-03-21 00:47:21 +00:00
/***/ 5477:
/***/ ((module) => {
"use strict";
module.exports = require("punycode");
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 2781:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("stream");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 4404:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("tls");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 7310:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("url");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 3837:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("util");
2021-05-05 07:42:20 +00:00
/***/ }),
2021-12-19 20:39:50 +00:00
/***/ 9796:
2021-05-05 07:42:20 +00:00
/***/ ((module) => {
"use strict";
2021-09-04 13:04:09 +00:00
module.exports = require("zlib");
2021-01-08 20:47:49 +00:00
2022-03-21 00:47:21 +00:00
/***/ }),
/***/ 2020:
/***/ ((module) => {
"use strict";
module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",
2021-05-05 07:42:20 +00:00
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __nccwpck_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ var threw = true;
/******/ try {
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__);
/******/ threw = false;
/******/ } finally {
/******/ if(threw) delete __webpack_module_cache__[moduleId];
/******/ }
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat */
/******/
2021-09-04 13:04:09 +00:00
/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
/******/
/************************************************************************/
2021-05-05 07:42:20 +00:00
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
2021-01-08 20:47:49 +00:00
const core = __nccwpck_require__(2186)
2021-12-19 20:39:50 +00:00
const fs = __nccwpck_require__(7147)
2021-01-08 20:47:49 +00:00
const Git = __nccwpck_require__(109)
2021-09-04 13:50:56 +00:00
const { forEach, dedent, addTrailingSlash, pathIsDirectory, copy, remove, arrayEquals } = __nccwpck_require__(8505)
2021-01-08 20:47:49 +00:00
const {
parseConfig,
COMMIT_EACH_FILE,
COMMIT_PREFIX,
PR_LABELS,
ASSIGNEES,
2021-01-10 15:59:11 +00:00
DRY_RUN,
TMP_DIR,
SKIP_CLEANUP,
OVERWRITE_EXISTING_PR,
2021-09-04 13:50:56 +00:00
SKIP_PR,
2021-09-27 14:22:23 +00:00
ORIGINAL_MESSAGE,
COMMIT_AS_PR_TITLE,
FORK,
REVIEWERS,
TEAM_REVIEWERS
2021-01-08 20:47:49 +00:00
} = __nccwpck_require__(4570)
const run = async () => {
// Reuse octokit for each repo
const git = new Git()
2021-01-08 20:47:49 +00:00
const repos = await parseConfig()
const prUrls = []
2021-01-08 20:47:49 +00:00
await forEach(repos, async (item) => {
core.info(`Repository Info`)
core.info(`Slug : ${ item.repo.name }`)
core.info(`Owner : ${ item.repo.user }`)
core.info(`Https Url : https://${ item.repo.fullName }`)
2021-01-08 20:47:49 +00:00
core.info(`Branch : ${ item.repo.branch }`)
core.info(' ')
try {
// Clone and setup the git repository locally
await git.initRepo(item.repo)
2021-01-08 20:47:49 +00:00
let existingPr
if (SKIP_PR === false) {
await git.createPrBranch()
// Check for existing PR and add warning message that the PR maybe about to change
existingPr = OVERWRITE_EXISTING_PR ? await git.findExistingPr() : undefined
if (existingPr && DRY_RUN === false) {
core.info(`Found existing PR ${ existingPr.number }`)
await git.setPrWarning()
}
}
2021-01-08 20:47:49 +00:00
2021-03-07 23:04:02 +00:00
core.info(`Locally syncing file(s) between source and target repository`)
2021-01-08 20:47:49 +00:00
const modified = []
// Loop through all selected files of the source repo
2021-01-08 20:47:49 +00:00
await forEach(item.files, async (file) => {
const fileExists = fs.existsSync(file.source)
if (fileExists === false) return core.warning(`Source ${ file.source } not found`)
2021-01-08 20:47:49 +00:00
const localDestination = `${ git.workingDir }/${ file.dest }`
2021-01-08 20:47:49 +00:00
const destExists = fs.existsSync(localDestination)
if (destExists === true && file.replace === false) return core.warning(`File(s) already exist(s) in destination and 'replace' option is set to false`)
2021-01-08 20:47:49 +00:00
const isDirectory = await pathIsDirectory(file.source)
const source = isDirectory ? `${ addTrailingSlash(file.source) }` : file.source
2021-12-22 17:50:58 +00:00
const dest = isDirectory ? `${ addTrailingSlash(localDestination) }` : localDestination
2021-01-08 20:47:49 +00:00
2021-09-04 13:04:09 +00:00
if (isDirectory) core.info(`Source is directory`)
const deleteOrphaned = isDirectory && file.deleteOrphaned
2021-12-22 14:29:17 +00:00
await copy(source, dest, deleteOrphaned, file.exclude)
2021-12-22 17:50:58 +00:00
await git.add(file.dest)
2021-04-16 13:23:55 +00:00
// Commit each file separately, if option is set to false commit all files at once later
if (COMMIT_EACH_FILE === true) {
const hasChanges = await git.hasChanges()
if (hasChanges === false) return core.debug('File(s) already up to date')
core.debug(`Creating commit for file(s) ${ file.dest }`)
// Use different commit/pr message based on if the source is a directory or file
const directory = isDirectory ? 'directory' : ''
const otherFiles = isDirectory ? 'and copied all sub files/folders' : ''
2021-09-04 13:50:56 +00:00
const useOriginalCommitMessage = ORIGINAL_MESSAGE && git.isOneCommitPush() && arrayEquals(await git.getChangesFromLastCommit(file.source), await git.changes(file.dest))
const message = {
true: {
2021-09-04 13:50:56 +00:00
commit: useOriginalCommitMessage ? git.originalCommitMessage() : `${ COMMIT_PREFIX } Synced local '${ file.dest }' with remote '${ file.source }'`,
pr: `Synced local ${ directory } <code>${ file.dest }</code> with remote ${ directory } <code>${ file.source }</code>`
},
false: {
2021-09-04 13:50:56 +00:00
commit: useOriginalCommitMessage ? git.originalCommitMessage() : `${ COMMIT_PREFIX } Created local '${ file.dest }' from remote '${ file.source }'`,
pr: `Created local ${ directory } <code>${ file.dest }</code> ${ otherFiles } from remote ${ directory } <code>${ file.source }</code>`
}
2021-01-08 20:47:49 +00:00
}
// Commit and add file to modified array so we later know if there are any changes to actually push
await git.commit(message[destExists].commit)
modified.push({
dest: file.dest,
source: file.source,
2021-09-27 14:22:23 +00:00
message: message[destExists].pr,
useOriginalMessage: useOriginalCommitMessage,
commitMessage: message[destExists].commit
})
}
2021-01-08 20:47:49 +00:00
})
if (DRY_RUN) {
core.warning('Dry run, no changes will be pushed')
core.debug('Git Status:')
core.debug(await git.status())
2021-01-08 20:47:49 +00:00
return
}
const hasChanges = await git.hasChanges()
2021-01-08 20:47:49 +00:00
// If no changes left and nothing was modified we can assume nothing has changed/needs to be pushed
if (hasChanges === false && modified.length < 1) {
core.info('File(s) already up to date')
if (existingPr) await git.removePrWarning()
2021-01-08 20:47:49 +00:00
return
}
// If there are still local changes left (i.e. not committed each file separately), commit them before pushing
if (hasChanges === true) {
core.debug(`Creating commit for remaining files`)
2021-01-08 20:47:49 +00:00
2021-09-04 13:50:56 +00:00
let useOriginalCommitMessage = ORIGINAL_MESSAGE && git.isOneCommitPush()
if (useOriginalCommitMessage) {
await forEach(item.files, async (file) => {
useOriginalCommitMessage = useOriginalCommitMessage && arrayEquals(await git.getChangesFromLastCommit(file.source), await git.changes(file.dest))
})
}
2021-09-27 14:22:23 +00:00
const commitMessage = useOriginalCommitMessage ? git.originalCommitMessage() : undefined
await git.commit(commitMessage)
modified.push({
2021-09-27 14:22:23 +00:00
dest: git.workingDir,
useOriginalMessage: useOriginalCommitMessage,
commitMessage: commitMessage
2021-01-08 20:47:49 +00:00
})
}
core.info(`Pushing changes to target repository`)
await git.push()
if (SKIP_PR === false) {
// If each file was committed separately, list them in the PR description
const changedFiles = dedent(`
<details>
<summary>Changed files</summary>
<ul>
${ modified.map((file) => `<li>${ file.message }</li>`).join('') }
</ul>
</details>
`)
2021-09-27 14:22:23 +00:00
const useCommitAsPRTitle = COMMIT_AS_PR_TITLE && modified.length === 1 && modified[0].useOriginalMessage
const pullRequest = await git.createOrUpdatePr(COMMIT_EACH_FILE ? changedFiles : '', useCommitAsPRTitle ? modified[0].commitMessage.split('\n', 1)[0].trim() : undefined)
2021-09-06 15:15:19 +00:00
core.notice(`Pull Request #${ pullRequest.number } created/updated: ${ pullRequest.html_url }`)
prUrls.push(pullRequest.html_url)
if (PR_LABELS !== undefined && PR_LABELS.length > 0 && !FORK) {
core.info(`Adding label(s) "${ PR_LABELS.join(', ') }" to PR`)
await git.addPrLabels(PR_LABELS)
}
2021-01-08 20:47:49 +00:00
if (ASSIGNEES !== undefined && ASSIGNEES.length > 0 && !FORK) {
core.info(`Adding assignee(s) "${ ASSIGNEES.join(', ') }" to PR`)
await git.addPrAssignees(ASSIGNEES)
}
if (REVIEWERS !== undefined && REVIEWERS.length > 0 && !FORK) {
core.info(`Adding reviewer(s) "${ REVIEWERS.join(', ') }" to PR`)
await git.addPrReviewers(REVIEWERS)
}
if (TEAM_REVIEWERS !== undefined && TEAM_REVIEWERS.length > 0 && !FORK) {
core.info(`Adding team reviewer(s) "${ TEAM_REVIEWERS.join(', ') }" to PR`)
await git.addPrTeamReviewers(TEAM_REVIEWERS)
}
2021-01-08 20:47:49 +00:00
}
core.info(' ')
} catch (err) {
core.setFailed(err.message)
core.debug(err)
2021-01-08 20:47:49 +00:00
}
})
// If we created any PRs, set their URLs as the output
if (prUrls) {
core.setOutput('pull_request_urls', prUrls)
}
2021-01-10 15:59:11 +00:00
if (SKIP_CLEANUP === true) {
core.info('Skipping cleanup')
return
}
2021-04-16 13:23:55 +00:00
await remove(TMP_DIR)
2021-01-10 15:59:11 +00:00
core.info('Cleanup complete')
2021-01-08 20:47:49 +00:00
}
run()
.then(() => {})
.catch((err) => {
core.setFailed(err.message)
core.debug(err)
2021-01-08 20:47:49 +00:00
})
2021-05-05 07:42:20 +00:00
})();
2021-01-08 20:47:49 +00:00
2021-05-05 07:42:20 +00:00
module.exports = __webpack_exports__;
2021-01-08 20:47:49 +00:00
/******/ })()
;