mirror of
https://github.com/dorny/test-reporter.git
synced 2025-12-15 13:57:09 +01:00
39823 lines
No EOL
1.5 MiB
Generated
39823 lines
No EOL
1.5 MiB
Generated
require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ 7171:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.ArtifactProvider = void 0;
|
|
const core = __importStar(__nccwpck_require__(2186));
|
|
const github = __importStar(__nccwpck_require__(5438));
|
|
const adm_zip_1 = __importDefault(__nccwpck_require__(6761));
|
|
const picomatch_1 = __importDefault(__nccwpck_require__(8569));
|
|
const github_utils_1 = __nccwpck_require__(3522);
|
|
class ArtifactProvider {
|
|
constructor(octokit, artifact, name, pattern, sha, runId, token) {
|
|
this.octokit = octokit;
|
|
this.artifact = artifact;
|
|
this.name = name;
|
|
this.pattern = pattern;
|
|
this.sha = sha;
|
|
this.runId = runId;
|
|
this.token = token;
|
|
if (this.artifact.startsWith('/')) {
|
|
const endIndex = this.artifact.lastIndexOf('/');
|
|
const rePattern = this.artifact.substring(1, endIndex);
|
|
const reOpts = this.artifact.substring(endIndex + 1);
|
|
const re = new RegExp(rePattern, reOpts);
|
|
this.artifactNameMatch = (str) => re.test(str);
|
|
this.getReportName = (str) => {
|
|
const match = str.match(re);
|
|
if (match === null) {
|
|
throw new Error(`Artifact name '${str}' does not match regex ${this.artifact}`);
|
|
}
|
|
let reportName = this.name;
|
|
for (let i = 1; i < match.length; i++) {
|
|
reportName = reportName.replace(new RegExp(`\\$${i}`, 'g'), match[i]);
|
|
}
|
|
return reportName;
|
|
};
|
|
}
|
|
else {
|
|
this.artifactNameMatch = (str) => str === this.artifact;
|
|
this.getReportName = () => this.name;
|
|
}
|
|
this.fileNameMatch = (0, picomatch_1.default)(pattern);
|
|
}
|
|
load() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const result = {};
|
|
const resp = yield this.octokit.rest.actions.listWorkflowRunArtifacts(Object.assign(Object.assign({}, github.context.repo), { run_id: this.runId }));
|
|
if (resp.data.artifacts.length === 0) {
|
|
core.warning(`No artifacts found in run ${this.runId}`);
|
|
return {};
|
|
}
|
|
const artifacts = resp.data.artifacts.filter(a => this.artifactNameMatch(a.name));
|
|
if (artifacts.length === 0) {
|
|
core.warning(`No artifact matches ${this.artifact}`);
|
|
return {};
|
|
}
|
|
for (const art of artifacts) {
|
|
const fileName = `${art.name}.zip`;
|
|
yield (0, github_utils_1.downloadArtifact)(this.octokit, art.id, fileName, this.token);
|
|
core.startGroup(`Reading archive ${fileName}`);
|
|
try {
|
|
const reportName = this.getReportName(art.name);
|
|
core.info(`Report name: ${reportName}`);
|
|
const files = [];
|
|
const zip = new adm_zip_1.default(fileName);
|
|
for (const entry of zip.getEntries()) {
|
|
const file = entry.entryName;
|
|
if (entry.isDirectory) {
|
|
core.info(`Skipping ${file}: entry is a directory`);
|
|
continue;
|
|
}
|
|
if (!this.fileNameMatch(file)) {
|
|
core.info(`Skipping ${file}: filename does not match pattern`);
|
|
continue;
|
|
}
|
|
const content = zip.readAsText(entry);
|
|
files.push({ file, content });
|
|
core.info(`Read ${file}: ${content.length} chars`);
|
|
}
|
|
if (result[reportName]) {
|
|
result[reportName].push(...files);
|
|
}
|
|
else {
|
|
result[reportName] = files;
|
|
}
|
|
}
|
|
finally {
|
|
core.endGroup();
|
|
}
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
listTrackedFiles() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return (0, github_utils_1.listFiles)(this.octokit, this.sha);
|
|
});
|
|
}
|
|
}
|
|
exports.ArtifactProvider = ArtifactProvider;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9399:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.LocalFileProvider = void 0;
|
|
const fs = __importStar(__nccwpck_require__(7147));
|
|
const fast_glob_1 = __importDefault(__nccwpck_require__(3664));
|
|
const git_1 = __nccwpck_require__(9844);
|
|
class LocalFileProvider {
|
|
constructor(name, pattern) {
|
|
this.name = name;
|
|
this.pattern = pattern;
|
|
}
|
|
load() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const result = [];
|
|
for (const pat of this.pattern) {
|
|
const paths = yield (0, fast_glob_1.default)(pat, { dot: true });
|
|
for (const file of paths) {
|
|
const content = yield fs.promises.readFile(file, { encoding: 'utf8' });
|
|
result.push({ file, content });
|
|
}
|
|
}
|
|
return { [this.name]: result };
|
|
});
|
|
}
|
|
listTrackedFiles() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return (0, git_1.listFiles)();
|
|
});
|
|
}
|
|
}
|
|
exports.LocalFileProvider = LocalFileProvider;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3109:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
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 }));
|
|
const core = __importStar(__nccwpck_require__(2186));
|
|
const github = __importStar(__nccwpck_require__(5438));
|
|
const artifact_provider_1 = __nccwpck_require__(7171);
|
|
const local_file_provider_1 = __nccwpck_require__(9399);
|
|
const get_annotations_1 = __nccwpck_require__(5867);
|
|
const get_report_1 = __nccwpck_require__(3737);
|
|
const dart_json_parser_1 = __nccwpck_require__(4528);
|
|
const dotnet_trx_parser_1 = __nccwpck_require__(2664);
|
|
const java_junit_parser_1 = __nccwpck_require__(676);
|
|
const jest_junit_parser_1 = __nccwpck_require__(1113);
|
|
const mocha_json_parser_1 = __nccwpck_require__(6043);
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
const github_utils_1 = __nccwpck_require__(3522);
|
|
const markdown_utils_1 = __nccwpck_require__(6482);
|
|
function main() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
const testReporter = new TestReporter();
|
|
yield testReporter.run();
|
|
}
|
|
catch (error) {
|
|
if (error instanceof Error)
|
|
core.setFailed(error);
|
|
else
|
|
core.setFailed(JSON.stringify(error));
|
|
}
|
|
});
|
|
}
|
|
class TestReporter {
|
|
constructor() {
|
|
this.artifact = core.getInput('artifact', { required: false });
|
|
this.name = core.getInput('name', { required: true });
|
|
this.path = core.getInput('path', { required: true });
|
|
this.pathReplaceBackslashes = core.getInput('path-replace-backslashes', { required: false }) === 'true';
|
|
this.reporter = core.getInput('reporter', { required: true });
|
|
this.listSuites = core.getInput('list-suites', { required: true });
|
|
this.listTests = core.getInput('list-tests', { required: true });
|
|
this.maxAnnotations = parseInt(core.getInput('max-annotations', { required: true }));
|
|
this.failOnError = core.getInput('fail-on-error', { required: true }) === 'true';
|
|
this.workDirInput = core.getInput('working-directory', { required: false });
|
|
this.onlySummary = core.getInput('only-summary', { required: false }) === 'true';
|
|
this.token = core.getInput('token', { required: true });
|
|
this.context = (0, github_utils_1.getCheckRunContext)();
|
|
this.octokit = github.getOctokit(this.token);
|
|
if (this.listSuites !== 'all' && this.listSuites !== 'failed') {
|
|
core.setFailed(`Input parameter 'list-suites' has invalid value`);
|
|
return;
|
|
}
|
|
if (this.listTests !== 'all' && this.listTests !== 'failed' && this.listTests !== 'none') {
|
|
core.setFailed(`Input parameter 'list-tests' has invalid value`);
|
|
return;
|
|
}
|
|
if (isNaN(this.maxAnnotations) || this.maxAnnotations < 0 || this.maxAnnotations > 50) {
|
|
core.setFailed(`Input parameter 'max-annotations' has invalid value`);
|
|
return;
|
|
}
|
|
}
|
|
run() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (this.workDirInput) {
|
|
core.info(`Changing directory to '${this.workDirInput}'`);
|
|
process.chdir(this.workDirInput);
|
|
}
|
|
core.info(`Check runs will be created with SHA=${this.context.sha}`);
|
|
// Split path pattern by ',' and optionally convert all backslashes to forward slashes
|
|
// fast-glob (micromatch) always interprets backslashes as escape characters instead of directory separators
|
|
const pathsList = this.path.split(',');
|
|
const pattern = this.pathReplaceBackslashes ? pathsList.map(path_utils_1.normalizeFilePath) : pathsList;
|
|
const inputProvider = this.artifact
|
|
? new artifact_provider_1.ArtifactProvider(this.octokit, this.artifact, this.name, pattern, this.context.sha, this.context.runId, this.token)
|
|
: new local_file_provider_1.LocalFileProvider(this.name, pattern);
|
|
const parseErrors = this.maxAnnotations > 0;
|
|
const trackedFiles = yield inputProvider.listTrackedFiles();
|
|
const workDir = this.artifact ? undefined : (0, path_utils_1.normalizeDirPath)(process.cwd(), true);
|
|
core.info(`Found ${trackedFiles.length} files tracked by GitHub`);
|
|
const options = {
|
|
workDir,
|
|
trackedFiles,
|
|
parseErrors
|
|
};
|
|
core.info(`Using test report parser '${this.reporter}'`);
|
|
const parser = this.getParser(this.reporter, options);
|
|
const results = [];
|
|
const input = yield inputProvider.load();
|
|
for (const [reportName, files] of Object.entries(input)) {
|
|
try {
|
|
core.startGroup(`Creating test report ${reportName}`);
|
|
const tr = yield this.createReport(parser, reportName, files);
|
|
results.push(...tr);
|
|
}
|
|
finally {
|
|
core.endGroup();
|
|
}
|
|
}
|
|
const isFailed = results.some(tr => tr.result === 'failed');
|
|
const conclusion = isFailed ? 'failure' : 'success';
|
|
const passed = results.reduce((sum, tr) => sum + tr.passed, 0);
|
|
const failed = results.reduce((sum, tr) => sum + tr.failed, 0);
|
|
const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0);
|
|
const time = results.reduce((sum, tr) => sum + tr.time, 0);
|
|
core.setOutput('conclusion', conclusion);
|
|
core.setOutput('passed', passed);
|
|
core.setOutput('failed', failed);
|
|
core.setOutput('skipped', skipped);
|
|
core.setOutput('time', time);
|
|
if (this.failOnError && isFailed) {
|
|
core.setFailed(`Failed test were found and 'fail-on-error' option is set to ${this.failOnError}`);
|
|
return;
|
|
}
|
|
if (results.length === 0) {
|
|
core.setFailed(`No test report files were found`);
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
createReport(parser, name, files) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (files.length === 0) {
|
|
core.warning(`No file matches path ${this.path}`);
|
|
return [];
|
|
}
|
|
const results = [];
|
|
for (const { file, content } of files) {
|
|
core.info(`Processing test results from ${file}`);
|
|
const tr = yield parser.parse(file, content);
|
|
results.push(tr);
|
|
}
|
|
core.info(`Creating check run ${name}`);
|
|
const createResp = yield this.octokit.rest.checks.create(Object.assign({ head_sha: this.context.sha, name, status: 'in_progress', output: {
|
|
title: name,
|
|
summary: ''
|
|
} }, github.context.repo));
|
|
core.info('Creating report summary');
|
|
const { listSuites, listTests, onlySummary } = this;
|
|
const baseUrl = createResp.data.html_url;
|
|
const summary = (0, get_report_1.getReport)(results, { listSuites, listTests, baseUrl, onlySummary });
|
|
core.info('Creating annotations');
|
|
const annotations = (0, get_annotations_1.getAnnotations)(results, this.maxAnnotations);
|
|
const isFailed = results.some(tr => tr.result === 'failed');
|
|
const conclusion = isFailed ? 'failure' : 'success';
|
|
const icon = isFailed ? markdown_utils_1.Icon.fail : markdown_utils_1.Icon.success;
|
|
core.info(`Updating check run conclusion (${conclusion}) and output`);
|
|
const resp = yield this.octokit.rest.checks.update(Object.assign({ check_run_id: createResp.data.id, conclusion, status: 'completed', output: {
|
|
title: `${name} ${icon}`,
|
|
summary,
|
|
annotations
|
|
} }, github.context.repo));
|
|
core.info(`Check run create response: ${resp.status}`);
|
|
core.info(`Check run URL: ${resp.data.url}`);
|
|
core.info(`Check run HTML: ${resp.data.html_url}`);
|
|
return results;
|
|
});
|
|
}
|
|
getParser(reporter, options) {
|
|
switch (reporter) {
|
|
case 'dart-json':
|
|
return new dart_json_parser_1.DartJsonParser(options, 'dart');
|
|
case 'dotnet-trx':
|
|
return new dotnet_trx_parser_1.DotnetTrxParser(options);
|
|
case 'flutter-json':
|
|
return new dart_json_parser_1.DartJsonParser(options, 'flutter');
|
|
case 'java-junit':
|
|
return new java_junit_parser_1.JavaJunitParser(options);
|
|
case 'jest-junit':
|
|
return new jest_junit_parser_1.JestJunitParser(options);
|
|
case 'mocha-json':
|
|
return new mocha_json_parser_1.MochaJsonParser(options);
|
|
default:
|
|
throw new Error(`Input variable 'reporter' is set to invalid value '${reporter}'`);
|
|
}
|
|
}
|
|
}
|
|
main();
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4528:
|
|
/***/ (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.DartJsonParser = void 0;
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
const dart_json_types_1 = __nccwpck_require__(7887);
|
|
const test_results_1 = __nccwpck_require__(2768);
|
|
class TestRun {
|
|
constructor(path, suites, success, time) {
|
|
this.path = path;
|
|
this.suites = suites;
|
|
this.success = success;
|
|
this.time = time;
|
|
}
|
|
}
|
|
class TestSuite {
|
|
constructor(suite) {
|
|
this.suite = suite;
|
|
this.groups = {};
|
|
}
|
|
}
|
|
class TestGroup {
|
|
constructor(group) {
|
|
this.group = group;
|
|
this.tests = [];
|
|
}
|
|
}
|
|
class TestCase {
|
|
constructor(testStart) {
|
|
this.testStart = testStart;
|
|
this.print = [];
|
|
this.groupId = testStart.test.groupIDs[testStart.test.groupIDs.length - 1];
|
|
}
|
|
get result() {
|
|
var _a, _b, _c, _d;
|
|
if ((_a = this.testDone) === null || _a === void 0 ? void 0 : _a.skipped) {
|
|
return 'skipped';
|
|
}
|
|
if (((_b = this.testDone) === null || _b === void 0 ? void 0 : _b.result) === 'success') {
|
|
return 'success';
|
|
}
|
|
if (((_c = this.testDone) === null || _c === void 0 ? void 0 : _c.result) === 'error' || ((_d = this.testDone) === null || _d === void 0 ? void 0 : _d.result) === 'failure') {
|
|
return 'failed';
|
|
}
|
|
return undefined;
|
|
}
|
|
get time() {
|
|
return this.testDone !== undefined ? this.testDone.time - this.testStart.time : 0;
|
|
}
|
|
}
|
|
class DartJsonParser {
|
|
constructor(options, sdk) {
|
|
this.options = options;
|
|
this.sdk = sdk;
|
|
}
|
|
parse(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const tr = this.getTestRun(path, content);
|
|
const result = this.getTestRunResult(tr);
|
|
return Promise.resolve(result);
|
|
});
|
|
}
|
|
getTestRun(path, content) {
|
|
const lines = content.split(/\n\r?/g);
|
|
const events = lines
|
|
.map((str, i) => {
|
|
if (str.trim() === '') {
|
|
return null;
|
|
}
|
|
try {
|
|
return JSON.parse(str);
|
|
}
|
|
catch (e) {
|
|
const errWithCol = e;
|
|
const col = errWithCol.columnNumber !== undefined ? `:${errWithCol.columnNumber}` : '';
|
|
throw new Error(`Invalid JSON at ${path}:${i + 1}${col}\n\n${e}`);
|
|
}
|
|
})
|
|
.filter(evt => evt != null);
|
|
let success = false;
|
|
let totalTime = 0;
|
|
const suites = {};
|
|
const tests = {};
|
|
for (const evt of events) {
|
|
if ((0, dart_json_types_1.isSuiteEvent)(evt)) {
|
|
suites[evt.suite.id] = new TestSuite(evt.suite);
|
|
}
|
|
else if ((0, dart_json_types_1.isGroupEvent)(evt)) {
|
|
suites[evt.group.suiteID].groups[evt.group.id] = new TestGroup(evt.group);
|
|
}
|
|
else if ((0, dart_json_types_1.isTestStartEvent)(evt) && evt.test.url !== null) {
|
|
const test = new TestCase(evt);
|
|
const suite = suites[evt.test.suiteID];
|
|
const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]];
|
|
group.tests.push(test);
|
|
tests[evt.test.id] = test;
|
|
}
|
|
else if ((0, dart_json_types_1.isTestDoneEvent)(evt) && !evt.hidden && tests[evt.testID]) {
|
|
tests[evt.testID].testDone = evt;
|
|
}
|
|
else if ((0, dart_json_types_1.isErrorEvent)(evt) && tests[evt.testID]) {
|
|
tests[evt.testID].error = evt;
|
|
}
|
|
else if ((0, dart_json_types_1.isMessageEvent)(evt) && tests[evt.testID]) {
|
|
tests[evt.testID].print.push(evt);
|
|
}
|
|
else if ((0, dart_json_types_1.isDoneEvent)(evt)) {
|
|
success = evt.success;
|
|
totalTime = evt.time;
|
|
}
|
|
}
|
|
return new TestRun(path, Object.values(suites), success, totalTime);
|
|
}
|
|
getTestRunResult(tr) {
|
|
const suites = tr.suites.map(s => {
|
|
return new test_results_1.TestSuiteResult(this.getRelativePath(s.suite.path), this.getGroups(s));
|
|
});
|
|
return new test_results_1.TestRunResult(tr.path, suites, tr.time);
|
|
}
|
|
getGroups(suite) {
|
|
const groups = Object.values(suite.groups).filter(grp => grp.tests.length > 0);
|
|
groups.sort((a, b) => { var _a, _b; return ((_a = a.group.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.group.line) !== null && _b !== void 0 ? _b : 0); });
|
|
return groups.map(group => {
|
|
group.tests.sort((a, b) => { var _a, _b; return ((_a = a.testStart.test.line) !== null && _a !== void 0 ? _a : 0) - ((_b = b.testStart.test.line) !== null && _b !== void 0 ? _b : 0); });
|
|
const tests = group.tests.map(tc => {
|
|
const error = this.getError(suite, tc);
|
|
const testName = group.group.name !== undefined && tc.testStart.test.name.startsWith(group.group.name)
|
|
? tc.testStart.test.name.slice(group.group.name.length).trim()
|
|
: tc.testStart.test.name.trim();
|
|
return new test_results_1.TestCaseResult(testName, tc.result, tc.time, error);
|
|
});
|
|
return new test_results_1.TestGroupResult(group.group.name, tests);
|
|
});
|
|
}
|
|
getError(testSuite, test) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
if (!this.options.parseErrors || !test.error) {
|
|
return undefined;
|
|
}
|
|
const { trackedFiles } = this.options;
|
|
const stackTrace = (_b = (_a = test.error) === null || _a === void 0 ? void 0 : _a.stackTrace) !== null && _b !== void 0 ? _b : '';
|
|
const print = test.print
|
|
.filter(p => p.messageType === 'print')
|
|
.map(p => p.message)
|
|
.join('\n');
|
|
const details = [print, stackTrace].filter(str => str !== '').join('\n');
|
|
const src = this.exceptionThrowSource(details, trackedFiles);
|
|
const message = this.getErrorMessage((_d = (_c = test.error) === null || _c === void 0 ? void 0 : _c.error) !== null && _d !== void 0 ? _d : '', print);
|
|
let path;
|
|
let line;
|
|
if (src !== undefined) {
|
|
path = src.path;
|
|
line = src.line;
|
|
}
|
|
else {
|
|
const testStartPath = this.getRelativePath(testSuite.suite.path);
|
|
if (trackedFiles.includes(testStartPath)) {
|
|
path = testStartPath;
|
|
line = (_f = (_e = test.testStart.test.root_line) !== null && _e !== void 0 ? _e : test.testStart.test.line) !== null && _f !== void 0 ? _f : undefined;
|
|
}
|
|
}
|
|
return {
|
|
path,
|
|
line,
|
|
message,
|
|
details
|
|
};
|
|
}
|
|
getErrorMessage(message, print) {
|
|
if (this.sdk === 'flutter') {
|
|
const uselessMessageRe = /^Test failed\. See exception logs above\.\nThe test description was:/m;
|
|
const flutterPrintRe = /^══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞═+\s+(.*)\s+When the exception was thrown, this was the stack:/ms;
|
|
if (uselessMessageRe.test(message)) {
|
|
const match = print.match(flutterPrintRe);
|
|
if (match !== null) {
|
|
return match[1];
|
|
}
|
|
}
|
|
}
|
|
return message || print;
|
|
}
|
|
exceptionThrowSource(ex, trackedFiles) {
|
|
const lines = ex.split(/\r?\n/g);
|
|
// regexp to extract file path and line number from stack trace
|
|
const dartRe = /^(?!package:)(.*)\s+(\d+):\d+\s+/;
|
|
const flutterRe = /^#\d+\s+.*\((?!package:)(.*):(\d+):\d+\)$/;
|
|
const re = this.sdk === 'dart' ? dartRe : flutterRe;
|
|
for (const str of lines) {
|
|
const match = str.match(re);
|
|
if (match !== null) {
|
|
const [_, pathStr, lineStr] = match;
|
|
const path = (0, path_utils_1.normalizeFilePath)(this.getRelativePath(pathStr));
|
|
if (trackedFiles.includes(path)) {
|
|
const line = parseInt(lineStr);
|
|
return { path, line };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
getRelativePath(path) {
|
|
const prefix = 'file://';
|
|
if (path.startsWith(prefix)) {
|
|
path = path.substr(prefix.length);
|
|
}
|
|
path = (0, path_utils_1.normalizeFilePath)(path);
|
|
const workDir = this.getWorkDir(path);
|
|
if (workDir !== undefined && path.startsWith(workDir)) {
|
|
path = path.substr(workDir.length);
|
|
}
|
|
return path;
|
|
}
|
|
getWorkDir(path) {
|
|
var _a, _b;
|
|
return ((_b = (_a = this.options.workDir) !== null && _a !== void 0 ? _a : this.assumedWorkDir) !== null && _b !== void 0 ? _b : (this.assumedWorkDir = (0, path_utils_1.getBasePath)(path, this.options.trackedFiles)));
|
|
}
|
|
}
|
|
exports.DartJsonParser = DartJsonParser;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7887:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
/// reflects documentation at https://github.com/dart-lang/test/blob/master/pkgs/test/doc/json_reporter.md
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.isMessageEvent = exports.isDoneEvent = exports.isErrorEvent = exports.isTestDoneEvent = exports.isTestStartEvent = exports.isGroupEvent = exports.isSuiteEvent = void 0;
|
|
function isSuiteEvent(event) {
|
|
return event.type === 'suite';
|
|
}
|
|
exports.isSuiteEvent = isSuiteEvent;
|
|
function isGroupEvent(event) {
|
|
return event.type === 'group';
|
|
}
|
|
exports.isGroupEvent = isGroupEvent;
|
|
function isTestStartEvent(event) {
|
|
return event.type === 'testStart';
|
|
}
|
|
exports.isTestStartEvent = isTestStartEvent;
|
|
function isTestDoneEvent(event) {
|
|
return event.type === 'testDone';
|
|
}
|
|
exports.isTestDoneEvent = isTestDoneEvent;
|
|
function isErrorEvent(event) {
|
|
return event.type === 'error';
|
|
}
|
|
exports.isErrorEvent = isErrorEvent;
|
|
function isDoneEvent(event) {
|
|
return event.type === 'done';
|
|
}
|
|
exports.isDoneEvent = isDoneEvent;
|
|
function isMessageEvent(event) {
|
|
return event.type === 'print';
|
|
}
|
|
exports.isMessageEvent = isMessageEvent;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2664:
|
|
/***/ (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.DotnetTrxParser = void 0;
|
|
const xml2js_1 = __nccwpck_require__(6189);
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
const parse_utils_1 = __nccwpck_require__(7811);
|
|
const test_results_1 = __nccwpck_require__(2768);
|
|
class TestClass {
|
|
constructor(name) {
|
|
this.name = name;
|
|
this.tests = [];
|
|
}
|
|
}
|
|
class Test {
|
|
constructor(name, outcome, duration, error) {
|
|
this.name = name;
|
|
this.outcome = outcome;
|
|
this.duration = duration;
|
|
this.error = error;
|
|
}
|
|
get result() {
|
|
switch (this.outcome) {
|
|
case 'Passed':
|
|
return 'success';
|
|
case 'NotExecuted':
|
|
return 'skipped';
|
|
case 'Failed':
|
|
return 'failed';
|
|
}
|
|
}
|
|
}
|
|
class DotnetTrxParser {
|
|
constructor(options) {
|
|
this.options = options;
|
|
}
|
|
parse(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const trx = yield this.getTrxReport(path, content);
|
|
const tc = this.getTestClasses(trx);
|
|
const tr = this.getTestRunResult(path, trx, tc);
|
|
tr.sort(true);
|
|
return tr;
|
|
});
|
|
}
|
|
getTrxReport(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
return (yield (0, xml2js_1.parseStringPromise)(content));
|
|
}
|
|
catch (e) {
|
|
throw new Error(`Invalid XML at ${path}\n\n${e}`);
|
|
}
|
|
});
|
|
}
|
|
getTestClasses(trx) {
|
|
if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined) {
|
|
return [];
|
|
}
|
|
const unitTests = {};
|
|
for (const td of trx.TestRun.TestDefinitions) {
|
|
for (const ut of td.UnitTest) {
|
|
unitTests[ut.$.id] = ut;
|
|
}
|
|
}
|
|
const unitTestsResults = trx.TestRun.Results.flatMap(r => r.UnitTestResult).flatMap(result => ({
|
|
result,
|
|
test: unitTests[result.$.testId]
|
|
}));
|
|
const testClasses = {};
|
|
for (const r of unitTestsResults) {
|
|
const className = r.test.TestMethod[0].$.className;
|
|
let tc = testClasses[className];
|
|
if (tc === undefined) {
|
|
tc = new TestClass(className);
|
|
testClasses[tc.name] = tc;
|
|
}
|
|
const error = this.getErrorInfo(r.result);
|
|
const durationAttr = r.result.$.duration;
|
|
const duration = durationAttr ? (0, parse_utils_1.parseNetDuration)(durationAttr) : 0;
|
|
const resultTestName = r.result.$.testName;
|
|
const testName = resultTestName.startsWith(className) && resultTestName[className.length] === '.'
|
|
? resultTestName.substr(className.length + 1)
|
|
: resultTestName;
|
|
const test = new Test(testName, r.result.$.outcome, duration, error);
|
|
tc.tests.push(test);
|
|
}
|
|
const result = Object.values(testClasses);
|
|
return result;
|
|
}
|
|
getTestRunResult(path, trx, testClasses) {
|
|
const times = trx.TestRun.Times[0].$;
|
|
const totalTime = (0, parse_utils_1.parseIsoDate)(times.finish).getTime() - (0, parse_utils_1.parseIsoDate)(times.start).getTime();
|
|
const suites = testClasses.map(testClass => {
|
|
const tests = testClass.tests.map(test => {
|
|
const error = this.getError(test);
|
|
return new test_results_1.TestCaseResult(test.name, test.result, test.duration, error);
|
|
});
|
|
const group = new test_results_1.TestGroupResult(null, tests);
|
|
return new test_results_1.TestSuiteResult(testClass.name, [group]);
|
|
});
|
|
return new test_results_1.TestRunResult(path, suites, totalTime);
|
|
}
|
|
getErrorInfo(testResult) {
|
|
var _a;
|
|
if (testResult.$.outcome !== 'Failed') {
|
|
return undefined;
|
|
}
|
|
const output = testResult.Output;
|
|
const error = (output === null || output === void 0 ? void 0 : output.length) > 0 && ((_a = output[0].ErrorInfo) === null || _a === void 0 ? void 0 : _a.length) > 0 ? output[0].ErrorInfo[0] : undefined;
|
|
return error;
|
|
}
|
|
getError(test) {
|
|
if (!this.options.parseErrors || !test.error) {
|
|
return undefined;
|
|
}
|
|
const error = test.error;
|
|
if (!Array.isArray(error.Message) ||
|
|
error.Message.length === 0 ||
|
|
!Array.isArray(error.StackTrace) ||
|
|
error.StackTrace.length === 0) {
|
|
return undefined;
|
|
}
|
|
const message = test.error.Message[0];
|
|
const stackTrace = test.error.StackTrace[0];
|
|
let path;
|
|
let line;
|
|
const src = this.exceptionThrowSource(stackTrace);
|
|
if (src) {
|
|
path = src.path;
|
|
line = src.line;
|
|
}
|
|
return {
|
|
path,
|
|
line,
|
|
message,
|
|
details: `${message}\n${stackTrace}`
|
|
};
|
|
}
|
|
exceptionThrowSource(stackTrace) {
|
|
const lines = stackTrace.split(/\r*\n/);
|
|
const re = / in (.+):line (\d+)$/;
|
|
const { trackedFiles } = this.options;
|
|
for (const str of lines) {
|
|
const match = str.match(re);
|
|
if (match !== null) {
|
|
const [_, fileStr, lineStr] = match;
|
|
const filePath = (0, path_utils_1.normalizeFilePath)(fileStr);
|
|
const workDir = this.getWorkDir(filePath);
|
|
if (workDir) {
|
|
const file = filePath.substr(workDir.length);
|
|
if (trackedFiles.includes(file)) {
|
|
const line = parseInt(lineStr);
|
|
return { path: file, line };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
getWorkDir(path) {
|
|
var _a, _b;
|
|
return ((_b = (_a = this.options.workDir) !== null && _a !== void 0 ? _a : this.assumedWorkDir) !== null && _b !== void 0 ? _b : (this.assumedWorkDir = (0, path_utils_1.getBasePath)(path, this.options.trackedFiles)));
|
|
}
|
|
}
|
|
exports.DotnetTrxParser = DotnetTrxParser;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 676:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
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.JavaJunitParser = void 0;
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
const xml2js_1 = __nccwpck_require__(6189);
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
const test_results_1 = __nccwpck_require__(2768);
|
|
class JavaJunitParser {
|
|
constructor(options) {
|
|
var _a;
|
|
this.options = options;
|
|
// Map to efficient lookup of all paths with given file name
|
|
this.trackedFiles = {};
|
|
for (const filePath of options.trackedFiles) {
|
|
const fileName = path.basename(filePath);
|
|
const files = (_a = this.trackedFiles[fileName]) !== null && _a !== void 0 ? _a : (this.trackedFiles[fileName] = []);
|
|
files.push((0, path_utils_1.normalizeFilePath)(filePath));
|
|
}
|
|
}
|
|
parse(filePath, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const reportOrSuite = yield this.getJunitReport(filePath, content);
|
|
const isReport = reportOrSuite.testsuites !== undefined;
|
|
// XML might contain:
|
|
// - multiple suites under <testsuites> root node
|
|
// - single <testsuite> as root node
|
|
let ju;
|
|
if (isReport) {
|
|
ju = reportOrSuite;
|
|
}
|
|
else {
|
|
// Make it behave the same way as if suite was inside <testsuites> root node
|
|
const suite = reportOrSuite.testsuite;
|
|
ju = {
|
|
testsuites: {
|
|
$: { time: suite.$.time },
|
|
testsuite: [suite]
|
|
}
|
|
};
|
|
}
|
|
return this.getTestRunResult(filePath, ju);
|
|
});
|
|
}
|
|
getJunitReport(filePath, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
return yield (0, xml2js_1.parseStringPromise)(content);
|
|
}
|
|
catch (e) {
|
|
throw new Error(`Invalid XML at ${filePath}\n\n${e}`);
|
|
}
|
|
});
|
|
}
|
|
getTestRunResult(filePath, junit) {
|
|
var _a;
|
|
const suites = junit.testsuites.testsuite === undefined
|
|
? []
|
|
: junit.testsuites.testsuite.map(ts => {
|
|
const name = ts.$.name.trim();
|
|
const time = parseFloat(ts.$.time) * 1000;
|
|
const sr = new test_results_1.TestSuiteResult(name, this.getGroups(ts), time);
|
|
return sr;
|
|
});
|
|
const seconds = parseFloat((_a = junit.testsuites.$) === null || _a === void 0 ? void 0 : _a.time);
|
|
const time = isNaN(seconds) ? undefined : seconds * 1000;
|
|
return new test_results_1.TestRunResult(filePath, suites, time);
|
|
}
|
|
getGroups(suite) {
|
|
if (suite.testcase === undefined) {
|
|
return [];
|
|
}
|
|
const groups = [];
|
|
for (const tc of suite.testcase) {
|
|
// Normally classname is same as suite name - both refer to same Java class
|
|
// Therefore it doesn't make sense to process it as a group
|
|
// and tests will be added to default group with empty name
|
|
const className = tc.$.classname === suite.$.name ? '' : tc.$.classname;
|
|
let grp = groups.find(g => g.name === className);
|
|
if (grp === undefined) {
|
|
grp = { name: className, tests: [] };
|
|
groups.push(grp);
|
|
}
|
|
grp.tests.push(tc);
|
|
}
|
|
return groups.map(grp => {
|
|
const tests = grp.tests.map(tc => {
|
|
const name = tc.$.name.trim();
|
|
const result = this.getTestCaseResult(tc);
|
|
const time = parseFloat(tc.$.time) * 1000;
|
|
const error = this.getTestCaseError(tc);
|
|
return new test_results_1.TestCaseResult(name, result, time, error);
|
|
});
|
|
return new test_results_1.TestGroupResult(grp.name, tests);
|
|
});
|
|
}
|
|
getTestCaseResult(test) {
|
|
if (test.failure || test.error)
|
|
return 'failed';
|
|
if (test.skipped)
|
|
return 'skipped';
|
|
return 'success';
|
|
}
|
|
getTestCaseError(tc) {
|
|
var _a;
|
|
if (!this.options.parseErrors) {
|
|
return undefined;
|
|
}
|
|
// We process <error> and <failure> the same way
|
|
const failures = (_a = tc.failure) !== null && _a !== void 0 ? _a : tc.error;
|
|
if (!failures) {
|
|
return undefined;
|
|
}
|
|
const failure = failures[0];
|
|
const details = typeof failure === 'object' ? failure._ : failure;
|
|
let filePath;
|
|
let line;
|
|
const src = this.exceptionThrowSource(details);
|
|
if (src) {
|
|
filePath = src.filePath;
|
|
line = src.line;
|
|
}
|
|
return {
|
|
path: filePath,
|
|
line,
|
|
details,
|
|
message: typeof failure === 'object' ? failure.message : undefined
|
|
};
|
|
}
|
|
exceptionThrowSource(stackTrace) {
|
|
const lines = stackTrace.split(/\r?\n/);
|
|
const re = /^at (.*)\((.*):(\d+)\)$/;
|
|
for (const str of lines) {
|
|
const match = str.match(re);
|
|
if (match !== null) {
|
|
const [_, tracePath, fileName, lineStr] = match;
|
|
const filePath = this.getFilePath(tracePath, fileName);
|
|
if (filePath !== undefined) {
|
|
const line = parseInt(lineStr);
|
|
return { filePath, line };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Stacktrace in Java doesn't contain full paths to source file.
|
|
// There are only package, file name and line.
|
|
// Assuming folder structure matches package name (as it should in Java),
|
|
// we can try to match tracked file.
|
|
getFilePath(tracePath, fileName) {
|
|
// Check if there is any tracked file with given name
|
|
const files = this.trackedFiles[fileName];
|
|
if (files === undefined) {
|
|
return undefined;
|
|
}
|
|
// Remove class name and method name from trace.
|
|
// Take parts until first item with capital letter - package names are lowercase while class name is CamelCase.
|
|
const packageParts = tracePath.split(/\./g);
|
|
const packageIndex = packageParts.findIndex(part => part[0] <= 'Z');
|
|
if (packageIndex !== -1) {
|
|
packageParts.splice(packageIndex, packageParts.length - packageIndex);
|
|
}
|
|
if (packageParts.length === 0) {
|
|
return undefined;
|
|
}
|
|
// Get right file
|
|
// - file name matches
|
|
// - parent folders structure must reflect the package name
|
|
for (const filePath of files) {
|
|
const dirs = path.dirname(filePath).split(/\//g);
|
|
if (packageParts.length > dirs.length) {
|
|
continue;
|
|
}
|
|
// get only N parent folders, where N = length of package name parts
|
|
if (dirs.length > packageParts.length) {
|
|
dirs.splice(0, dirs.length - packageParts.length);
|
|
}
|
|
// check if parent folder structure matches package name
|
|
const isMatch = packageParts.every((part, i) => part === dirs[i]);
|
|
if (isMatch) {
|
|
return filePath;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
exports.JavaJunitParser = JavaJunitParser;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1113:
|
|
/***/ (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.JestJunitParser = void 0;
|
|
const xml2js_1 = __nccwpck_require__(6189);
|
|
const node_utils_1 = __nccwpck_require__(5824);
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
const test_results_1 = __nccwpck_require__(2768);
|
|
class JestJunitParser {
|
|
constructor(options) {
|
|
this.options = options;
|
|
}
|
|
parse(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const ju = yield this.getJunitReport(path, content);
|
|
return this.getTestRunResult(path, ju);
|
|
});
|
|
}
|
|
getJunitReport(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
return (yield (0, xml2js_1.parseStringPromise)(content));
|
|
}
|
|
catch (e) {
|
|
throw new Error(`Invalid XML at ${path}\n\n${e}`);
|
|
}
|
|
});
|
|
}
|
|
getTestRunResult(path, junit) {
|
|
const suites = junit.testsuites.testsuite === undefined
|
|
? []
|
|
: junit.testsuites.testsuite.map(ts => {
|
|
const name = ts.$.name.trim();
|
|
const time = parseFloat(ts.$.time) * 1000;
|
|
const sr = new test_results_1.TestSuiteResult(name, this.getGroups(ts), time);
|
|
return sr;
|
|
});
|
|
const time = parseFloat(junit.testsuites.$.time) * 1000;
|
|
return new test_results_1.TestRunResult(path, suites, time);
|
|
}
|
|
getGroups(suite) {
|
|
const groups = [];
|
|
for (const tc of suite.testcase) {
|
|
let grp = groups.find(g => g.describe === tc.$.classname);
|
|
if (grp === undefined) {
|
|
grp = { describe: tc.$.classname, tests: [] };
|
|
groups.push(grp);
|
|
}
|
|
grp.tests.push(tc);
|
|
}
|
|
return groups.map(grp => {
|
|
const tests = grp.tests.map(tc => {
|
|
const name = tc.$.name.trim();
|
|
const result = this.getTestCaseResult(tc);
|
|
const time = parseFloat(tc.$.time) * 1000;
|
|
const error = this.getTestCaseError(tc);
|
|
return new test_results_1.TestCaseResult(name, result, time, error);
|
|
});
|
|
return new test_results_1.TestGroupResult(grp.describe, tests);
|
|
});
|
|
}
|
|
getTestCaseResult(test) {
|
|
if (test.failure)
|
|
return 'failed';
|
|
if (test.skipped)
|
|
return 'skipped';
|
|
return 'success';
|
|
}
|
|
getTestCaseError(tc) {
|
|
if (!this.options.parseErrors || !tc.failure) {
|
|
return undefined;
|
|
}
|
|
const details = tc.failure[0];
|
|
let path;
|
|
let line;
|
|
const src = (0, node_utils_1.getExceptionSource)(details, this.options.trackedFiles, file => this.getRelativePath(file));
|
|
if (src) {
|
|
path = src.path;
|
|
line = src.line;
|
|
}
|
|
return {
|
|
path,
|
|
line,
|
|
details
|
|
};
|
|
}
|
|
getRelativePath(path) {
|
|
path = (0, path_utils_1.normalizeFilePath)(path);
|
|
const workDir = this.getWorkDir(path);
|
|
if (workDir !== undefined && path.startsWith(workDir)) {
|
|
path = path.substr(workDir.length);
|
|
}
|
|
return path;
|
|
}
|
|
getWorkDir(path) {
|
|
var _a, _b;
|
|
return ((_b = (_a = this.options.workDir) !== null && _a !== void 0 ? _a : this.assumedWorkDir) !== null && _b !== void 0 ? _b : (this.assumedWorkDir = (0, path_utils_1.getBasePath)(path, this.options.trackedFiles)));
|
|
}
|
|
}
|
|
exports.JestJunitParser = JestJunitParser;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6043:
|
|
/***/ (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.MochaJsonParser = void 0;
|
|
const test_results_1 = __nccwpck_require__(2768);
|
|
const node_utils_1 = __nccwpck_require__(5824);
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
class MochaJsonParser {
|
|
constructor(options) {
|
|
this.options = options;
|
|
}
|
|
parse(path, content) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const mocha = this.getMochaJson(path, content);
|
|
const result = this.getTestRunResult(path, mocha);
|
|
result.sort(true);
|
|
return Promise.resolve(result);
|
|
});
|
|
}
|
|
getMochaJson(path, content) {
|
|
try {
|
|
return JSON.parse(content);
|
|
}
|
|
catch (e) {
|
|
throw new Error(`Invalid JSON at ${path}\n\n${e}`);
|
|
}
|
|
}
|
|
getTestRunResult(resultsPath, mocha) {
|
|
const suitesMap = {};
|
|
const getSuite = (test) => {
|
|
var _a;
|
|
const path = this.getRelativePath(test.file);
|
|
return (_a = suitesMap[path]) !== null && _a !== void 0 ? _a : (suitesMap[path] = new test_results_1.TestSuiteResult(path, []));
|
|
};
|
|
for (const test of mocha.passes) {
|
|
const suite = getSuite(test);
|
|
this.processTest(suite, test, 'success');
|
|
}
|
|
for (const test of mocha.failures) {
|
|
const suite = getSuite(test);
|
|
this.processTest(suite, test, 'failed');
|
|
}
|
|
for (const test of mocha.pending) {
|
|
const suite = getSuite(test);
|
|
this.processTest(suite, test, 'skipped');
|
|
}
|
|
const suites = Object.values(suitesMap);
|
|
return new test_results_1.TestRunResult(resultsPath, suites, mocha.stats.duration);
|
|
}
|
|
processTest(suite, test, result) {
|
|
var _a;
|
|
const groupName = test.fullTitle !== test.title
|
|
? test.fullTitle.substr(0, test.fullTitle.length - test.title.length).trimEnd()
|
|
: null;
|
|
let group = suite.groups.find(grp => grp.name === groupName);
|
|
if (group === undefined) {
|
|
group = new test_results_1.TestGroupResult(groupName, []);
|
|
suite.groups.push(group);
|
|
}
|
|
const error = this.getTestCaseError(test);
|
|
const testCase = new test_results_1.TestCaseResult(test.title, result, (_a = test.duration) !== null && _a !== void 0 ? _a : 0, error);
|
|
group.tests.push(testCase);
|
|
}
|
|
getTestCaseError(test) {
|
|
const details = test.err.stack;
|
|
const message = test.err.message;
|
|
if (details === undefined) {
|
|
return undefined;
|
|
}
|
|
let path;
|
|
let line;
|
|
const src = (0, node_utils_1.getExceptionSource)(details, this.options.trackedFiles, file => this.getRelativePath(file));
|
|
if (src) {
|
|
path = src.path;
|
|
line = src.line;
|
|
}
|
|
return {
|
|
path,
|
|
line,
|
|
message,
|
|
details
|
|
};
|
|
}
|
|
getRelativePath(path) {
|
|
path = (0, path_utils_1.normalizeFilePath)(path);
|
|
const workDir = this.getWorkDir(path);
|
|
if (workDir !== undefined && path.startsWith(workDir)) {
|
|
path = path.substr(workDir.length);
|
|
}
|
|
return path;
|
|
}
|
|
getWorkDir(path) {
|
|
var _a, _b;
|
|
return ((_b = (_a = this.options.workDir) !== null && _a !== void 0 ? _a : this.assumedWorkDir) !== null && _b !== void 0 ? _b : (this.assumedWorkDir = (0, path_utils_1.getBasePath)(path, this.options.trackedFiles)));
|
|
}
|
|
}
|
|
exports.MochaJsonParser = MochaJsonParser;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5867:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getAnnotations = void 0;
|
|
const markdown_utils_1 = __nccwpck_require__(6482);
|
|
const parse_utils_1 = __nccwpck_require__(7811);
|
|
function getAnnotations(results, maxCount) {
|
|
var _a, _b, _c, _d;
|
|
if (maxCount === 0) {
|
|
return [];
|
|
}
|
|
// Collect errors from TestRunResults
|
|
// Merge duplicates if there are more test results files processed
|
|
const errors = [];
|
|
const mergeDup = results.length > 1;
|
|
for (const tr of results) {
|
|
for (const ts of tr.suites) {
|
|
for (const tg of ts.groups) {
|
|
for (const tc of tg.tests) {
|
|
const err = tc.error;
|
|
if (err === undefined) {
|
|
continue;
|
|
}
|
|
const path = (_a = err.path) !== null && _a !== void 0 ? _a : tr.path;
|
|
const line = (_b = err.line) !== null && _b !== void 0 ? _b : 0;
|
|
if (mergeDup) {
|
|
const dup = errors.find(e => path === e.path && line === e.line && err.details === e.details);
|
|
if (dup !== undefined) {
|
|
dup.testRunPaths.push(tr.path);
|
|
continue;
|
|
}
|
|
}
|
|
errors.push({
|
|
testRunPaths: [tr.path],
|
|
suiteName: ts.name,
|
|
testName: tg.name ? `${tg.name} ► ${tc.name}` : tc.name,
|
|
details: err.details,
|
|
message: (_d = (_c = err.message) !== null && _c !== void 0 ? _c : (0, parse_utils_1.getFirstNonEmptyLine)(err.details)) !== null && _d !== void 0 ? _d : 'Test failed',
|
|
path,
|
|
line
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Limit number of created annotations
|
|
errors.splice(maxCount + 1);
|
|
const annotations = errors.map(e => {
|
|
const message = [
|
|
'Failed test found in:',
|
|
e.testRunPaths.map(p => ` ${p}`).join('\n'),
|
|
'Error:',
|
|
ident((0, markdown_utils_1.fixEol)(e.message), ' ')
|
|
].join('\n');
|
|
return enforceCheckRunLimits({
|
|
path: e.path,
|
|
start_line: e.line,
|
|
end_line: e.line,
|
|
annotation_level: 'failure',
|
|
title: `${e.suiteName} ► ${e.testName}`,
|
|
raw_details: (0, markdown_utils_1.fixEol)(e.details),
|
|
message
|
|
});
|
|
});
|
|
return annotations;
|
|
}
|
|
exports.getAnnotations = getAnnotations;
|
|
function enforceCheckRunLimits(err) {
|
|
err.title = (0, markdown_utils_1.ellipsis)(err.title || '', 255);
|
|
err.message = (0, markdown_utils_1.ellipsis)(err.message, 65535);
|
|
if (err.raw_details) {
|
|
err.raw_details = (0, markdown_utils_1.ellipsis)(err.raw_details, 65535);
|
|
}
|
|
return err;
|
|
}
|
|
function ident(text, prefix) {
|
|
return text
|
|
.split(/\n/g)
|
|
.map(line => prefix + line)
|
|
.join('\n');
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3737:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getReport = void 0;
|
|
const core = __importStar(__nccwpck_require__(2186));
|
|
const markdown_utils_1 = __nccwpck_require__(6482);
|
|
const node_utils_1 = __nccwpck_require__(5824);
|
|
const parse_utils_1 = __nccwpck_require__(7811);
|
|
const slugger_1 = __nccwpck_require__(3328);
|
|
const MAX_REPORT_LENGTH = 65535;
|
|
const defaultOptions = {
|
|
listSuites: 'all',
|
|
listTests: 'all',
|
|
baseUrl: '',
|
|
onlySummary: false
|
|
};
|
|
function getReport(results, options = defaultOptions) {
|
|
core.info('Generating check run summary');
|
|
applySort(results);
|
|
const opts = Object.assign({}, options);
|
|
let lines = renderReport(results, opts);
|
|
let report = lines.join('\n');
|
|
if (getByteLength(report) <= MAX_REPORT_LENGTH) {
|
|
return report;
|
|
}
|
|
if (opts.listTests === 'all') {
|
|
core.info("Test report summary is too big - setting 'listTests' to 'failed'");
|
|
opts.listTests = 'failed';
|
|
lines = renderReport(results, opts);
|
|
report = lines.join('\n');
|
|
if (getByteLength(report) <= MAX_REPORT_LENGTH) {
|
|
return report;
|
|
}
|
|
}
|
|
core.warning(`Test report summary exceeded limit of ${MAX_REPORT_LENGTH} bytes and will be trimmed`);
|
|
return trimReport(lines);
|
|
}
|
|
exports.getReport = getReport;
|
|
function trimReport(lines) {
|
|
const closingBlock = '```';
|
|
const errorMsg = `**Report exceeded GitHub limit of ${MAX_REPORT_LENGTH} bytes and has been trimmed**`;
|
|
const maxErrorMsgLength = closingBlock.length + errorMsg.length + 2;
|
|
const maxReportLength = MAX_REPORT_LENGTH - maxErrorMsgLength;
|
|
let reportLength = 0;
|
|
let codeBlock = false;
|
|
let endLineIndex = 0;
|
|
for (endLineIndex = 0; endLineIndex < lines.length; endLineIndex++) {
|
|
const line = lines[endLineIndex];
|
|
const lineLength = getByteLength(line);
|
|
reportLength += lineLength + 1;
|
|
if (reportLength > maxReportLength) {
|
|
break;
|
|
}
|
|
if (line === '```') {
|
|
codeBlock = !codeBlock;
|
|
}
|
|
}
|
|
const reportLines = lines.slice(0, endLineIndex);
|
|
if (codeBlock) {
|
|
reportLines.push('```');
|
|
}
|
|
reportLines.push(errorMsg);
|
|
return reportLines.join('\n');
|
|
}
|
|
function applySort(results) {
|
|
results.sort((a, b) => a.path.localeCompare(b.path, node_utils_1.DEFAULT_LOCALE));
|
|
for (const res of results) {
|
|
res.suites.sort((a, b) => a.name.localeCompare(b.name, node_utils_1.DEFAULT_LOCALE));
|
|
}
|
|
}
|
|
function getByteLength(text) {
|
|
return Buffer.byteLength(text, 'utf8');
|
|
}
|
|
function renderReport(results, options) {
|
|
const sections = [];
|
|
const badge = getReportBadge(results);
|
|
sections.push(badge);
|
|
const runs = getTestRunsReport(results, options);
|
|
sections.push(...runs);
|
|
return sections;
|
|
}
|
|
function getReportBadge(results) {
|
|
const passed = results.reduce((sum, tr) => sum + tr.passed, 0);
|
|
const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0);
|
|
const failed = results.reduce((sum, tr) => sum + tr.failed, 0);
|
|
return getBadge(passed, failed, skipped);
|
|
}
|
|
function getBadge(passed, failed, skipped) {
|
|
const text = [];
|
|
if (passed > 0) {
|
|
text.push(`${passed} passed`);
|
|
}
|
|
if (failed > 0) {
|
|
text.push(`${failed} failed`);
|
|
}
|
|
if (skipped > 0) {
|
|
text.push(`${skipped} skipped`);
|
|
}
|
|
const message = text.length > 0 ? text.join(', ') : 'none';
|
|
let color = 'success';
|
|
if (failed > 0) {
|
|
color = 'critical';
|
|
}
|
|
else if (passed === 0 && failed === 0) {
|
|
color = 'yellow';
|
|
}
|
|
const hint = failed > 0 ? 'Tests failed' : 'Tests passed successfully';
|
|
const uri = encodeURIComponent(`tests-${message}-${color}`);
|
|
return ``;
|
|
}
|
|
function getTestRunsReport(testRuns, options) {
|
|
const sections = [];
|
|
if (testRuns.length > 1 || options.onlySummary) {
|
|
const tableData = testRuns.map((tr, runIndex) => {
|
|
const time = (0, markdown_utils_1.formatTime)(tr.time);
|
|
const name = tr.path;
|
|
const addr = options.baseUrl + makeRunSlug(runIndex).link;
|
|
const nameLink = (0, markdown_utils_1.link)(name, addr);
|
|
const passed = tr.passed > 0 ? `${tr.passed}${markdown_utils_1.Icon.success}` : '';
|
|
const failed = tr.failed > 0 ? `${tr.failed}${markdown_utils_1.Icon.fail}` : '';
|
|
const skipped = tr.skipped > 0 ? `${tr.skipped}${markdown_utils_1.Icon.skip}` : '';
|
|
return [nameLink, passed, failed, skipped, time];
|
|
});
|
|
const resultsTable = (0, markdown_utils_1.table)(['Report', 'Passed', 'Failed', 'Skipped', 'Time'], [markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...tableData);
|
|
sections.push(resultsTable);
|
|
}
|
|
if (options.onlySummary === false) {
|
|
const suitesReports = testRuns.map((tr, i) => getSuitesReport(tr, i, options)).flat();
|
|
sections.push(...suitesReports);
|
|
}
|
|
return sections;
|
|
}
|
|
function getSuitesReport(tr, runIndex, options) {
|
|
const sections = [];
|
|
const trSlug = makeRunSlug(runIndex);
|
|
const nameLink = `<a id="${trSlug.id}" href="${options.baseUrl + trSlug.link}">${tr.path}</a>`;
|
|
const icon = getResultIcon(tr.result);
|
|
sections.push(`## ${icon}\xa0${nameLink}`);
|
|
const time = (0, markdown_utils_1.formatTime)(tr.time);
|
|
const headingLine2 = tr.tests > 0
|
|
? `**${tr.tests}** tests were completed in **${time}** with **${tr.passed}** passed, **${tr.failed}** failed and **${tr.skipped}** skipped.`
|
|
: 'No tests found';
|
|
sections.push(headingLine2);
|
|
const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites;
|
|
if (suites.length > 0) {
|
|
const suitesTable = (0, markdown_utils_1.table)(['Test suite', 'Passed', 'Failed', 'Skipped', 'Time'], [markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...suites.map((s, suiteIndex) => {
|
|
const tsTime = (0, markdown_utils_1.formatTime)(s.time);
|
|
const tsName = s.name;
|
|
const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed');
|
|
const tsAddr = options.baseUrl + makeSuiteSlug(runIndex, suiteIndex).link;
|
|
const tsNameLink = skipLink ? tsName : (0, markdown_utils_1.link)(tsName, tsAddr);
|
|
const passed = s.passed > 0 ? `${s.passed}${markdown_utils_1.Icon.success}` : '';
|
|
const failed = s.failed > 0 ? `${s.failed}${markdown_utils_1.Icon.fail}` : '';
|
|
const skipped = s.skipped > 0 ? `${s.skipped}${markdown_utils_1.Icon.skip}` : '';
|
|
return [tsNameLink, passed, failed, skipped, tsTime];
|
|
}));
|
|
sections.push(suitesTable);
|
|
}
|
|
if (options.listTests !== 'none') {
|
|
const tests = suites.map((ts, suiteIndex) => getTestsReport(ts, runIndex, suiteIndex, options)).flat();
|
|
if (tests.length > 1) {
|
|
sections.push(...tests);
|
|
}
|
|
}
|
|
return sections;
|
|
}
|
|
function getTestsReport(ts, runIndex, suiteIndex, options) {
|
|
var _a, _b, _c;
|
|
if (options.listTests === 'failed' && ts.result !== 'failed') {
|
|
return [];
|
|
}
|
|
const groups = ts.groups;
|
|
if (groups.length === 0) {
|
|
return [];
|
|
}
|
|
const sections = [];
|
|
const tsName = ts.name;
|
|
const tsSlug = makeSuiteSlug(runIndex, suiteIndex);
|
|
const tsNameLink = `<a id="${tsSlug.id}" href="${options.baseUrl + tsSlug.link}">${tsName}</a>`;
|
|
const icon = getResultIcon(ts.result);
|
|
sections.push(`### ${icon}\xa0${tsNameLink}`);
|
|
sections.push('```');
|
|
for (const grp of groups) {
|
|
if (grp.name) {
|
|
sections.push(grp.name);
|
|
}
|
|
const space = grp.name ? ' ' : '';
|
|
for (const tc of grp.tests) {
|
|
const result = getResultIcon(tc.result);
|
|
sections.push(`${space}${result} ${tc.name}`);
|
|
if (tc.error) {
|
|
const lines = (_c = ((_a = tc.error.message) !== null && _a !== void 0 ? _a : (_b = (0, parse_utils_1.getFirstNonEmptyLine)(tc.error.details)) === null || _b === void 0 ? void 0 : _b.trim())) === null || _c === void 0 ? void 0 : _c.split(/\r?\n/g).map(l => '\t' + l);
|
|
if (lines) {
|
|
sections.push(...lines);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sections.push('```');
|
|
return sections;
|
|
}
|
|
function makeRunSlug(runIndex) {
|
|
// use prefix to avoid slug conflicts after escaping the paths
|
|
return (0, slugger_1.slug)(`r${runIndex}`);
|
|
}
|
|
function makeSuiteSlug(runIndex, suiteIndex) {
|
|
// use prefix to avoid slug conflicts after escaping the paths
|
|
return (0, slugger_1.slug)(`r${runIndex}s${suiteIndex}`);
|
|
}
|
|
function getResultIcon(result) {
|
|
switch (result) {
|
|
case 'success':
|
|
return markdown_utils_1.Icon.success;
|
|
case 'skipped':
|
|
return markdown_utils_1.Icon.skip;
|
|
case 'failed':
|
|
return markdown_utils_1.Icon.fail;
|
|
default:
|
|
return '';
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2768:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.TestCaseResult = exports.TestGroupResult = exports.TestSuiteResult = exports.TestRunResult = void 0;
|
|
const node_utils_1 = __nccwpck_require__(5824);
|
|
class TestRunResult {
|
|
constructor(path, suites, totalTime) {
|
|
this.path = path;
|
|
this.suites = suites;
|
|
this.totalTime = totalTime;
|
|
}
|
|
get tests() {
|
|
return this.suites.reduce((sum, g) => sum + g.tests, 0);
|
|
}
|
|
get passed() {
|
|
return this.suites.reduce((sum, g) => sum + g.passed, 0);
|
|
}
|
|
get failed() {
|
|
return this.suites.reduce((sum, g) => sum + g.failed, 0);
|
|
}
|
|
get skipped() {
|
|
return this.suites.reduce((sum, g) => sum + g.skipped, 0);
|
|
}
|
|
get time() {
|
|
var _a;
|
|
return (_a = this.totalTime) !== null && _a !== void 0 ? _a : this.suites.reduce((sum, g) => sum + g.time, 0);
|
|
}
|
|
get result() {
|
|
return this.suites.some(t => t.result === 'failed') ? 'failed' : 'success';
|
|
}
|
|
get failedSuites() {
|
|
return this.suites.filter(s => s.result === 'failed');
|
|
}
|
|
sort(deep) {
|
|
this.suites.sort((a, b) => a.name.localeCompare(b.name, node_utils_1.DEFAULT_LOCALE));
|
|
if (deep) {
|
|
for (const suite of this.suites) {
|
|
suite.sort(deep);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.TestRunResult = TestRunResult;
|
|
class TestSuiteResult {
|
|
constructor(name, groups, totalTime) {
|
|
this.name = name;
|
|
this.groups = groups;
|
|
this.totalTime = totalTime;
|
|
}
|
|
get tests() {
|
|
return this.groups.reduce((sum, g) => sum + g.tests.length, 0);
|
|
}
|
|
get passed() {
|
|
return this.groups.reduce((sum, g) => sum + g.passed, 0);
|
|
}
|
|
get failed() {
|
|
return this.groups.reduce((sum, g) => sum + g.failed, 0);
|
|
}
|
|
get skipped() {
|
|
return this.groups.reduce((sum, g) => sum + g.skipped, 0);
|
|
}
|
|
get time() {
|
|
var _a;
|
|
return (_a = this.totalTime) !== null && _a !== void 0 ? _a : this.groups.reduce((sum, g) => sum + g.time, 0);
|
|
}
|
|
get result() {
|
|
return this.groups.some(t => t.result === 'failed') ? 'failed' : 'success';
|
|
}
|
|
get failedGroups() {
|
|
return this.groups.filter(grp => grp.result === 'failed');
|
|
}
|
|
sort(deep) {
|
|
this.groups.sort((a, b) => { var _a, _b; return ((_a = a.name) !== null && _a !== void 0 ? _a : '').localeCompare((_b = b.name) !== null && _b !== void 0 ? _b : '', node_utils_1.DEFAULT_LOCALE); });
|
|
if (deep) {
|
|
for (const grp of this.groups) {
|
|
grp.sort();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.TestSuiteResult = TestSuiteResult;
|
|
class TestGroupResult {
|
|
constructor(name, tests) {
|
|
this.name = name;
|
|
this.tests = tests;
|
|
}
|
|
get passed() {
|
|
return this.tests.reduce((sum, t) => (t.result === 'success' ? sum + 1 : sum), 0);
|
|
}
|
|
get failed() {
|
|
return this.tests.reduce((sum, t) => (t.result === 'failed' ? sum + 1 : sum), 0);
|
|
}
|
|
get skipped() {
|
|
return this.tests.reduce((sum, t) => (t.result === 'skipped' ? sum + 1 : sum), 0);
|
|
}
|
|
get time() {
|
|
return this.tests.reduce((sum, t) => sum + t.time, 0);
|
|
}
|
|
get result() {
|
|
return this.tests.some(t => t.result === 'failed') ? 'failed' : 'success';
|
|
}
|
|
get failedTests() {
|
|
return this.tests.filter(tc => tc.result === 'failed');
|
|
}
|
|
sort() {
|
|
this.tests.sort((a, b) => a.name.localeCompare(b.name, node_utils_1.DEFAULT_LOCALE));
|
|
}
|
|
}
|
|
exports.TestGroupResult = TestGroupResult;
|
|
class TestCaseResult {
|
|
constructor(name, result, time, error) {
|
|
this.name = name;
|
|
this.result = result;
|
|
this.time = time;
|
|
this.error = error;
|
|
}
|
|
}
|
|
exports.TestCaseResult = TestCaseResult;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6069:
|
|
/***/ (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 }));
|
|
const exec_1 = __nccwpck_require__(1514);
|
|
// Wraps original exec() function
|
|
// Returns exit code and whole stdout/stderr
|
|
function exec(commandLine, args, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
options = options || {};
|
|
let stdout = '';
|
|
let stderr = '';
|
|
options.listeners = {
|
|
stdout: (data) => (stdout += data.toString()),
|
|
stderr: (data) => (stderr += data.toString())
|
|
};
|
|
const code = yield (0, exec_1.exec)(commandLine, args, options);
|
|
return { code, stdout, stderr };
|
|
});
|
|
}
|
|
exports["default"] = exec;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9844:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.listFiles = void 0;
|
|
const core = __importStar(__nccwpck_require__(2186));
|
|
const exec_1 = __importDefault(__nccwpck_require__(6069));
|
|
function listFiles() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
core.startGroup('Listing all files tracked by git');
|
|
let output = '';
|
|
try {
|
|
output = (yield (0, exec_1.default)('git', ['ls-files', '-z'])).stdout;
|
|
}
|
|
finally {
|
|
fixStdOutNullTermination();
|
|
core.endGroup();
|
|
}
|
|
return output.split('\u0000').filter(s => s.length > 0);
|
|
});
|
|
}
|
|
exports.listFiles = listFiles;
|
|
function fixStdOutNullTermination() {
|
|
// Previous command uses NULL as delimiters and output is printed to stdout.
|
|
// We have to make sure next thing written to stdout will start on new line.
|
|
// Otherwise things like ::set-output wouldn't work.
|
|
core.info('');
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3522:
|
|
/***/ (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;
|
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
}
|
|
Object.defineProperty(o, k2, desc);
|
|
}) : (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
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.listFiles = exports.downloadArtifact = exports.getCheckRunContext = void 0;
|
|
const fs_1 = __nccwpck_require__(7147);
|
|
const core = __importStar(__nccwpck_require__(2186));
|
|
const github = __importStar(__nccwpck_require__(5438));
|
|
const stream = __importStar(__nccwpck_require__(2781));
|
|
const util_1 = __nccwpck_require__(3837);
|
|
const got_1 = __nccwpck_require__(9859);
|
|
const asyncStream = (0, util_1.promisify)(stream.pipeline);
|
|
function getCheckRunContext() {
|
|
if (github.context.eventName === 'workflow_run') {
|
|
core.info('Action was triggered by workflow_run: using SHA and RUN_ID from triggering workflow');
|
|
const event = github.context.payload;
|
|
if (!event.workflow_run) {
|
|
throw new Error("Event of type 'workflow_run' is missing 'workflow_run' field");
|
|
}
|
|
return {
|
|
sha: event.workflow_run.head_commit.id,
|
|
runId: event.workflow_run.id
|
|
};
|
|
}
|
|
const runId = github.context.runId;
|
|
if (github.context.payload.pull_request) {
|
|
core.info(`Action was triggered by ${github.context.eventName}: using SHA from head of source branch`);
|
|
const pr = github.context.payload.pull_request;
|
|
return { sha: pr.head.sha, runId };
|
|
}
|
|
return { sha: github.context.sha, runId };
|
|
}
|
|
exports.getCheckRunContext = getCheckRunContext;
|
|
function downloadArtifact(octokit, artifactId, fileName, token) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
core.startGroup(`Downloading artifact ${fileName}`);
|
|
try {
|
|
core.info(`Artifact ID: ${artifactId}`);
|
|
const req = octokit.rest.actions.downloadArtifact.endpoint(Object.assign(Object.assign({}, github.context.repo), { artifact_id: artifactId, archive_format: 'zip' }));
|
|
const headers = {
|
|
Authorization: `Bearer ${token}`
|
|
};
|
|
const resp = yield (0, got_1.got)(req.url, {
|
|
headers,
|
|
followRedirect: false
|
|
});
|
|
core.info(`Fetch artifact URL: ${resp.statusCode} ${resp.statusMessage}`);
|
|
if (resp.statusCode !== 302) {
|
|
throw new Error('Fetch artifact URL failed: received unexpected status code');
|
|
}
|
|
const url = resp.headers.location;
|
|
if (url === undefined) {
|
|
const receivedHeaders = Object.keys(resp.headers);
|
|
core.info(`Received headers: ${receivedHeaders.join(', ')}`);
|
|
throw new Error('Location header was not found in API response');
|
|
}
|
|
if (typeof url !== 'string') {
|
|
throw new Error(`Location header has unexpected value: ${url}`);
|
|
}
|
|
const downloadStream = got_1.got.stream(url, { headers });
|
|
const fileWriterStream = (0, fs_1.createWriteStream)(fileName);
|
|
core.info(`Downloading ${url}`);
|
|
downloadStream.on('downloadProgress', ({ transferred }) => {
|
|
core.info(`Progress: ${transferred} B`);
|
|
});
|
|
yield asyncStream(downloadStream, fileWriterStream);
|
|
}
|
|
finally {
|
|
core.endGroup();
|
|
}
|
|
});
|
|
}
|
|
exports.downloadArtifact = downloadArtifact;
|
|
function listFiles(octokit, sha) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
core.startGroup('Fetching list of tracked files from GitHub');
|
|
try {
|
|
const commit = yield octokit.rest.git.getCommit(Object.assign({ commit_sha: sha }, github.context.repo));
|
|
const files = yield listGitTree(octokit, commit.data.tree.sha, '');
|
|
return files;
|
|
}
|
|
finally {
|
|
core.endGroup();
|
|
}
|
|
});
|
|
}
|
|
exports.listFiles = listFiles;
|
|
function listGitTree(octokit, sha, path) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const pathLog = path ? ` at ${path}` : '';
|
|
core.info(`Fetching tree ${sha}${pathLog}`);
|
|
let truncated = false;
|
|
let tree = yield octokit.rest.git.getTree(Object.assign({ recursive: 'true', tree_sha: sha }, github.context.repo));
|
|
if (tree.data.truncated) {
|
|
truncated = true;
|
|
tree = yield octokit.rest.git.getTree(Object.assign({ tree_sha: sha }, github.context.repo));
|
|
}
|
|
const result = [];
|
|
for (const tr of tree.data.tree) {
|
|
const file = `${path}${tr.path}`;
|
|
if (tr.type === 'blob') {
|
|
result.push(file);
|
|
}
|
|
else if (tr.type === 'tree' && truncated) {
|
|
const files = yield listGitTree(octokit, tr.sha, `${file}/`);
|
|
result.push(...files);
|
|
}
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6482:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.formatTime = exports.ellipsis = exports.fixEol = exports.tableEscape = exports.table = exports.link = exports.Icon = exports.Align = void 0;
|
|
var Align;
|
|
(function (Align) {
|
|
Align["Left"] = ":---";
|
|
Align["Center"] = ":---:";
|
|
Align["Right"] = "---:";
|
|
Align["None"] = "---";
|
|
})(Align = exports.Align || (exports.Align = {}));
|
|
exports.Icon = {
|
|
skip: '✖️',
|
|
success: '✔️',
|
|
fail: '❌' // ':x:'
|
|
};
|
|
function link(title, address) {
|
|
return `[${title}](${address})`;
|
|
}
|
|
exports.link = link;
|
|
function table(headers, align, ...rows) {
|
|
const headerRow = `|${headers.map(tableEscape).join('|')}|`;
|
|
const alignRow = `|${align.join('|')}|`;
|
|
const contentRows = rows.map(row => `|${row.map(tableEscape).join('|')}|`).join('\n');
|
|
return [headerRow, alignRow, contentRows].join('\n');
|
|
}
|
|
exports.table = table;
|
|
function tableEscape(content) {
|
|
return content.toString().replace('|', '\\|');
|
|
}
|
|
exports.tableEscape = tableEscape;
|
|
function fixEol(text) {
|
|
var _a;
|
|
return (_a = text === null || text === void 0 ? void 0 : text.replace(/\r/g, '')) !== null && _a !== void 0 ? _a : '';
|
|
}
|
|
exports.fixEol = fixEol;
|
|
function ellipsis(text, maxLength) {
|
|
if (text.length <= maxLength) {
|
|
return text;
|
|
}
|
|
return text.substr(0, maxLength - 3) + '...';
|
|
}
|
|
exports.ellipsis = ellipsis;
|
|
function formatTime(ms) {
|
|
if (ms > 1000) {
|
|
return `${Math.round(ms / 1000)}s`;
|
|
}
|
|
return `${Math.round(ms)}ms`;
|
|
}
|
|
exports.formatTime = formatTime;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5824:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getExceptionSource = exports.DEFAULT_LOCALE = void 0;
|
|
const path_utils_1 = __nccwpck_require__(4070);
|
|
exports.DEFAULT_LOCALE = 'en-US';
|
|
function getExceptionSource(stackTrace, trackedFiles, getRelativePath) {
|
|
const lines = stackTrace.split(/\r?\n/);
|
|
const re = /\((.*):(\d+):\d+\)$/;
|
|
for (const str of lines) {
|
|
const match = str.match(re);
|
|
if (match !== null) {
|
|
const [_, fileStr, lineStr] = match;
|
|
const filePath = (0, path_utils_1.normalizeFilePath)(fileStr);
|
|
if (filePath.startsWith('internal/') || filePath.includes('/node_modules/')) {
|
|
continue;
|
|
}
|
|
const path = getRelativePath(filePath);
|
|
if (!path) {
|
|
continue;
|
|
}
|
|
if (trackedFiles.includes(path)) {
|
|
const line = parseInt(lineStr);
|
|
return { path, line };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exports.getExceptionSource = getExceptionSource;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7811:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getFirstNonEmptyLine = exports.parseIsoDate = exports.parseNetDuration = void 0;
|
|
function parseNetDuration(str) {
|
|
const durationRe = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)$/;
|
|
const durationMatch = str.match(durationRe);
|
|
if (durationMatch === null) {
|
|
throw new Error(`Invalid format: "${str}" is not NET duration`);
|
|
}
|
|
const [_, hourStr, minStr, secStr] = durationMatch;
|
|
return (parseInt(hourStr) * 3600 + parseInt(minStr) * 60 + parseFloat(secStr)) * 1000;
|
|
}
|
|
exports.parseNetDuration = parseNetDuration;
|
|
function parseIsoDate(str) {
|
|
const isoDateRe = /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)$/;
|
|
if (str === undefined || !isoDateRe.test(str)) {
|
|
throw new Error(`Invalid format: "${str}" is not ISO date`);
|
|
}
|
|
return new Date(str);
|
|
}
|
|
exports.parseIsoDate = parseIsoDate;
|
|
function getFirstNonEmptyLine(stackTrace) {
|
|
const lines = stackTrace.split(/\r?\n/g);
|
|
return lines.find(str => !/^\s*$/.test(str));
|
|
}
|
|
exports.getFirstNonEmptyLine = getFirstNonEmptyLine;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4070:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getBasePath = exports.normalizeFilePath = exports.normalizeDirPath = void 0;
|
|
function normalizeDirPath(path, addTrailingSlash) {
|
|
if (!path) {
|
|
return path;
|
|
}
|
|
path = normalizeFilePath(path);
|
|
if (addTrailingSlash && !path.endsWith('/')) {
|
|
path += '/';
|
|
}
|
|
return path;
|
|
}
|
|
exports.normalizeDirPath = normalizeDirPath;
|
|
function normalizeFilePath(path) {
|
|
if (!path) {
|
|
return path;
|
|
}
|
|
return path.trim().replace(/\\/g, '/');
|
|
}
|
|
exports.normalizeFilePath = normalizeFilePath;
|
|
function getBasePath(path, trackedFiles) {
|
|
if (trackedFiles.includes(path)) {
|
|
return '';
|
|
}
|
|
let max = '';
|
|
for (const file of trackedFiles) {
|
|
if (path.endsWith(file) && file.length > max.length) {
|
|
max = file;
|
|
}
|
|
}
|
|
if (max === '') {
|
|
return undefined;
|
|
}
|
|
const base = path.substr(0, path.length - max.length);
|
|
return base;
|
|
}
|
|
exports.getBasePath = getBasePath;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3328:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.slug = void 0;
|
|
// Returns HTML element id and href link usable as manual anchor links
|
|
// This is needed because Github in check run summary doesn't automatically
|
|
// create links out of headings as it normally does for other markdown content
|
|
function slug(name) {
|
|
const slugId = name
|
|
.trim()
|
|
.replace(/_/g, '')
|
|
.replace(/[./\\]/g, '-')
|
|
.replace(/[^\w-]/g, '');
|
|
const id = `user-content-${slugId}`;
|
|
const link = `#${slugId}`;
|
|
return { id, link };
|
|
}
|
|
exports.slug = slug;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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;
|
|
});
|
|
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.issue = exports.issueCommand = void 0;
|
|
const os = __importStar(__nccwpck_require__(2037));
|
|
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;
|
|
};
|
|
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.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;
|
|
const command_1 = __nccwpck_require__(7351);
|
|
const file_command_1 = __nccwpck_require__(717);
|
|
const utils_1 = __nccwpck_require__(5278);
|
|
const os = __importStar(__nccwpck_require__(2037));
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
const uuid_1 = __nccwpck_require__(5840);
|
|
const oidc_utils_1 = __nccwpck_require__(8041);
|
|
/**
|
|
* 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 = `ghadelimiter_${uuid_1.v4()}`;
|
|
// These should realistically never happen, but just in case someone finds a way to exploit uuid generation let's not allow keys or values that contain the delimiter.
|
|
if (name.includes(delimiter)) {
|
|
throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
|
|
}
|
|
if (convertedVal.includes(delimiter)) {
|
|
throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
|
|
}
|
|
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.
|
|
*
|
|
* @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;
|
|
}
|
|
return val.trim();
|
|
}
|
|
exports.getInput = getInput;
|
|
/**
|
|
* 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;
|
|
/**
|
|
* 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) {
|
|
process.stdout.write(os.EOL);
|
|
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()
|
|
* @param properties optional properties to add to the annotation.
|
|
*/
|
|
function error(message, properties = {}) {
|
|
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.error = error;
|
|
/**
|
|
* Adds a warning issue
|
|
* @param message warning issue message. Errors will be converted to string via toString()
|
|
* @param properties optional properties to add to the annotation.
|
|
*/
|
|
function warning(message, properties = {}) {
|
|
command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.warning = warning;
|
|
/**
|
|
* 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;
|
|
/**
|
|
* 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;
|
|
function getIDToken(aud) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield oidc_utils_1.OidcClient.getIDToken(aud);
|
|
});
|
|
}
|
|
exports.getIDToken = getIDToken;
|
|
/**
|
|
* Summary exports
|
|
*/
|
|
var summary_1 = __nccwpck_require__(1327);
|
|
Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } }));
|
|
/**
|
|
* @deprecated use core.summary
|
|
*/
|
|
var summary_2 = __nccwpck_require__(1327);
|
|
Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
|
|
/**
|
|
* Path exports
|
|
*/
|
|
var path_utils_1 = __nccwpck_require__(2981);
|
|
Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } }));
|
|
Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } }));
|
|
Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }));
|
|
//# 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;
|
|
});
|
|
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.issueCommand = void 0;
|
|
// We use any as a valid input type
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
const fs = __importStar(__nccwpck_require__(7147));
|
|
const os = __importStar(__nccwpck_require__(2037));
|
|
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
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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__(6255);
|
|
const auth_1 = __nccwpck_require__(5526);
|
|
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
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2981:
|
|
/***/ (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.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
/**
|
|
* toPosixPath converts the given path to the posix form. On Windows, \\ will be
|
|
* replaced with /.
|
|
*
|
|
* @param pth. Path to transform.
|
|
* @return string Posix path.
|
|
*/
|
|
function toPosixPath(pth) {
|
|
return pth.replace(/[\\]/g, '/');
|
|
}
|
|
exports.toPosixPath = toPosixPath;
|
|
/**
|
|
* toWin32Path converts the given path to the win32 form. On Linux, / will be
|
|
* replaced with \\.
|
|
*
|
|
* @param pth. Path to transform.
|
|
* @return string Win32 path.
|
|
*/
|
|
function toWin32Path(pth) {
|
|
return pth.replace(/[/]/g, '\\');
|
|
}
|
|
exports.toWin32Path = toWin32Path;
|
|
/**
|
|
* toPlatformPath converts the given path to a platform-specific path. It does
|
|
* this by replacing instances of / and \ with the platform-specific path
|
|
* separator.
|
|
*
|
|
* @param pth The path to platformize.
|
|
* @return string The platform-specific path.
|
|
*/
|
|
function toPlatformPath(pth) {
|
|
return pth.replace(/[/\\]/g, path.sep);
|
|
}
|
|
exports.toPlatformPath = toPlatformPath;
|
|
//# sourceMappingURL=path-utils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1327:
|
|
/***/ (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.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;
|
|
const os_1 = __nccwpck_require__(2037);
|
|
const fs_1 = __nccwpck_require__(7147);
|
|
const { access, appendFile, writeFile } = fs_1.promises;
|
|
exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';
|
|
exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';
|
|
class Summary {
|
|
constructor() {
|
|
this._buffer = '';
|
|
}
|
|
/**
|
|
* Finds the summary file path from the environment, rejects if env var is not found or file does not exist
|
|
* Also checks r/w permissions.
|
|
*
|
|
* @returns step summary file path
|
|
*/
|
|
filePath() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (this._filePath) {
|
|
return this._filePath;
|
|
}
|
|
const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];
|
|
if (!pathFromEnv) {
|
|
throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
|
|
}
|
|
try {
|
|
yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);
|
|
}
|
|
catch (_a) {
|
|
throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
|
|
}
|
|
this._filePath = pathFromEnv;
|
|
return this._filePath;
|
|
});
|
|
}
|
|
/**
|
|
* Wraps content in an HTML tag, adding any HTML attributes
|
|
*
|
|
* @param {string} tag HTML tag to wrap
|
|
* @param {string | null} content content within the tag
|
|
* @param {[attribute: string]: string} attrs key-value list of HTML attributes to add
|
|
*
|
|
* @returns {string} content wrapped in HTML element
|
|
*/
|
|
wrap(tag, content, attrs = {}) {
|
|
const htmlAttrs = Object.entries(attrs)
|
|
.map(([key, value]) => ` ${key}="${value}"`)
|
|
.join('');
|
|
if (!content) {
|
|
return `<${tag}${htmlAttrs}>`;
|
|
}
|
|
return `<${tag}${htmlAttrs}>${content}</${tag}>`;
|
|
}
|
|
/**
|
|
* Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.
|
|
*
|
|
* @param {SummaryWriteOptions} [options] (optional) options for write operation
|
|
*
|
|
* @returns {Promise<Summary>} summary instance
|
|
*/
|
|
write(options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);
|
|
const filePath = yield this.filePath();
|
|
const writeFunc = overwrite ? writeFile : appendFile;
|
|
yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });
|
|
return this.emptyBuffer();
|
|
});
|
|
}
|
|
/**
|
|
* Clears the summary buffer and wipes the summary file
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
clear() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.emptyBuffer().write({ overwrite: true });
|
|
});
|
|
}
|
|
/**
|
|
* Returns the current summary buffer as a string
|
|
*
|
|
* @returns {string} string of summary buffer
|
|
*/
|
|
stringify() {
|
|
return this._buffer;
|
|
}
|
|
/**
|
|
* If the summary buffer is empty
|
|
*
|
|
* @returns {boolen} true if the buffer is empty
|
|
*/
|
|
isEmptyBuffer() {
|
|
return this._buffer.length === 0;
|
|
}
|
|
/**
|
|
* Resets the summary buffer without writing to summary file
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
emptyBuffer() {
|
|
this._buffer = '';
|
|
return this;
|
|
}
|
|
/**
|
|
* Adds raw text to the summary buffer
|
|
*
|
|
* @param {string} text content to add
|
|
* @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addRaw(text, addEOL = false) {
|
|
this._buffer += text;
|
|
return addEOL ? this.addEOL() : this;
|
|
}
|
|
/**
|
|
* Adds the operating system-specific end-of-line marker to the buffer
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addEOL() {
|
|
return this.addRaw(os_1.EOL);
|
|
}
|
|
/**
|
|
* Adds an HTML codeblock to the summary buffer
|
|
*
|
|
* @param {string} code content to render within fenced code block
|
|
* @param {string} lang (optional) language to syntax highlight code
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addCodeBlock(code, lang) {
|
|
const attrs = Object.assign({}, (lang && { lang }));
|
|
const element = this.wrap('pre', this.wrap('code', code), attrs);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML list to the summary buffer
|
|
*
|
|
* @param {string[]} items list of items to render
|
|
* @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addList(items, ordered = false) {
|
|
const tag = ordered ? 'ol' : 'ul';
|
|
const listItems = items.map(item => this.wrap('li', item)).join('');
|
|
const element = this.wrap(tag, listItems);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML table to the summary buffer
|
|
*
|
|
* @param {SummaryTableCell[]} rows table rows
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addTable(rows) {
|
|
const tableBody = rows
|
|
.map(row => {
|
|
const cells = row
|
|
.map(cell => {
|
|
if (typeof cell === 'string') {
|
|
return this.wrap('td', cell);
|
|
}
|
|
const { header, data, colspan, rowspan } = cell;
|
|
const tag = header ? 'th' : 'td';
|
|
const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));
|
|
return this.wrap(tag, data, attrs);
|
|
})
|
|
.join('');
|
|
return this.wrap('tr', cells);
|
|
})
|
|
.join('');
|
|
const element = this.wrap('table', tableBody);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds a collapsable HTML details element to the summary buffer
|
|
*
|
|
* @param {string} label text for the closed state
|
|
* @param {string} content collapsable content
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addDetails(label, content) {
|
|
const element = this.wrap('details', this.wrap('summary', label) + content);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML image tag to the summary buffer
|
|
*
|
|
* @param {string} src path to the image you to embed
|
|
* @param {string} alt text description of the image
|
|
* @param {SummaryImageOptions} options (optional) addition image attributes
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addImage(src, alt, options) {
|
|
const { width, height } = options || {};
|
|
const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));
|
|
const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML section heading element
|
|
*
|
|
* @param {string} text heading text
|
|
* @param {number | string} [level=1] (optional) the heading level, default: 1
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addHeading(text, level) {
|
|
const tag = `h${level}`;
|
|
const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)
|
|
? tag
|
|
: 'h1';
|
|
const element = this.wrap(allowedTag, text);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML thematic break (<hr>) to the summary buffer
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addSeparator() {
|
|
const element = this.wrap('hr', null);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML line break (<br>) to the summary buffer
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addBreak() {
|
|
const element = this.wrap('br', null);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML blockquote to the summary buffer
|
|
*
|
|
* @param {string} text quote text
|
|
* @param {string} cite (optional) citation url
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addQuote(text, cite) {
|
|
const attrs = Object.assign({}, (cite && { cite }));
|
|
const element = this.wrap('blockquote', text, attrs);
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
/**
|
|
* Adds an HTML anchor tag to the summary buffer
|
|
*
|
|
* @param {string} text link text/content
|
|
* @param {string} href hyperlink
|
|
*
|
|
* @returns {Summary} summary instance
|
|
*/
|
|
addLink(text, href) {
|
|
const element = this.wrap('a', text, { href });
|
|
return this.addRaw(element).addEOL();
|
|
}
|
|
}
|
|
const _summary = new Summary();
|
|
/**
|
|
* @deprecated use `core.summary`
|
|
*/
|
|
exports.markdownSummary = _summary;
|
|
exports.summary = _summary;
|
|
//# sourceMappingURL=summary.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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 }));
|
|
exports.toCommandProperties = exports.toCommandValue = void 0;
|
|
/**
|
|
* 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;
|
|
/**
|
|
*
|
|
* @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,
|
|
file: annotationProperties.file,
|
|
line: annotationProperties.startLine,
|
|
endLine: annotationProperties.endLine,
|
|
col: annotationProperties.startColumn,
|
|
endColumn: annotationProperties.endColumn
|
|
};
|
|
}
|
|
exports.toCommandProperties = toCommandProperties;
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1514:
|
|
/***/ (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;
|
|
};
|
|
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.getExecOutput = exports.exec = void 0;
|
|
const string_decoder_1 = __nccwpck_require__(1576);
|
|
const tr = __importStar(__nccwpck_require__(8159));
|
|
/**
|
|
* Exec a command.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with return code
|
|
*
|
|
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
|
* @param args optional arguments for tool. Escaping is handled by the lib.
|
|
* @param options optional exec options. See ExecOptions
|
|
* @returns Promise<number> exit code
|
|
*/
|
|
function exec(commandLine, args, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const commandArgs = tr.argStringToArray(commandLine);
|
|
if (commandArgs.length === 0) {
|
|
throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
|
|
}
|
|
// Path to tool to execute should be first arg
|
|
const toolPath = commandArgs[0];
|
|
args = commandArgs.slice(1).concat(args || []);
|
|
const runner = new tr.ToolRunner(toolPath, args, options);
|
|
return runner.exec();
|
|
});
|
|
}
|
|
exports.exec = exec;
|
|
/**
|
|
* Exec a command and get the output.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with the exit code and collected stdout and stderr
|
|
*
|
|
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
|
* @param args optional arguments for tool. Escaping is handled by the lib.
|
|
* @param options optional exec options. See ExecOptions
|
|
* @returns Promise<ExecOutput> exit code, stdout, and stderr
|
|
*/
|
|
function getExecOutput(commandLine, args, options) {
|
|
var _a, _b;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let stdout = '';
|
|
let stderr = '';
|
|
//Using string decoder covers the case where a mult-byte character is split
|
|
const stdoutDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
const stderrDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout;
|
|
const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr;
|
|
const stdErrListener = (data) => {
|
|
stderr += stderrDecoder.write(data);
|
|
if (originalStdErrListener) {
|
|
originalStdErrListener(data);
|
|
}
|
|
};
|
|
const stdOutListener = (data) => {
|
|
stdout += stdoutDecoder.write(data);
|
|
if (originalStdoutListener) {
|
|
originalStdoutListener(data);
|
|
}
|
|
};
|
|
const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener });
|
|
const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
|
|
//flush any remaining characters
|
|
stdout += stdoutDecoder.end();
|
|
stderr += stderrDecoder.end();
|
|
return {
|
|
exitCode,
|
|
stdout,
|
|
stderr
|
|
};
|
|
});
|
|
}
|
|
exports.getExecOutput = getExecOutput;
|
|
//# sourceMappingURL=exec.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8159:
|
|
/***/ (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;
|
|
};
|
|
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.argStringToArray = exports.ToolRunner = void 0;
|
|
const os = __importStar(__nccwpck_require__(2037));
|
|
const events = __importStar(__nccwpck_require__(2361));
|
|
const child = __importStar(__nccwpck_require__(2081));
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
const io = __importStar(__nccwpck_require__(7436));
|
|
const ioUtil = __importStar(__nccwpck_require__(1962));
|
|
const timers_1 = __nccwpck_require__(9512);
|
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
/*
|
|
* Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
|
|
*/
|
|
class ToolRunner extends events.EventEmitter {
|
|
constructor(toolPath, args, options) {
|
|
super();
|
|
if (!toolPath) {
|
|
throw new Error("Parameter 'toolPath' cannot be null or empty.");
|
|
}
|
|
this.toolPath = toolPath;
|
|
this.args = args || [];
|
|
this.options = options || {};
|
|
}
|
|
_debug(message) {
|
|
if (this.options.listeners && this.options.listeners.debug) {
|
|
this.options.listeners.debug(message);
|
|
}
|
|
}
|
|
_getCommandString(options, noPrefix) {
|
|
const toolPath = this._getSpawnFileName();
|
|
const args = this._getSpawnArgs(options);
|
|
let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
|
|
if (IS_WINDOWS) {
|
|
// Windows + cmd file
|
|
if (this._isCmdFile()) {
|
|
cmd += toolPath;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
// Windows + verbatim
|
|
else if (options.windowsVerbatimArguments) {
|
|
cmd += `"${toolPath}"`;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
// Windows (regular)
|
|
else {
|
|
cmd += this._windowsQuoteCmdArg(toolPath);
|
|
for (const a of args) {
|
|
cmd += ` ${this._windowsQuoteCmdArg(a)}`;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// OSX/Linux - this can likely be improved with some form of quoting.
|
|
// creating processes on Unix is fundamentally different than Windows.
|
|
// on Unix, execvp() takes an arg array.
|
|
cmd += toolPath;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
return cmd;
|
|
}
|
|
_processLineBuffer(data, strBuffer, onLine) {
|
|
try {
|
|
let s = strBuffer + data.toString();
|
|
let n = s.indexOf(os.EOL);
|
|
while (n > -1) {
|
|
const line = s.substring(0, n);
|
|
onLine(line);
|
|
// the rest of the string ...
|
|
s = s.substring(n + os.EOL.length);
|
|
n = s.indexOf(os.EOL);
|
|
}
|
|
return s;
|
|
}
|
|
catch (err) {
|
|
// streaming lines to console is best effort. Don't fail a build.
|
|
this._debug(`error processing line. Failed with error ${err}`);
|
|
return '';
|
|
}
|
|
}
|
|
_getSpawnFileName() {
|
|
if (IS_WINDOWS) {
|
|
if (this._isCmdFile()) {
|
|
return process.env['COMSPEC'] || 'cmd.exe';
|
|
}
|
|
}
|
|
return this.toolPath;
|
|
}
|
|
_getSpawnArgs(options) {
|
|
if (IS_WINDOWS) {
|
|
if (this._isCmdFile()) {
|
|
let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
|
|
for (const a of this.args) {
|
|
argline += ' ';
|
|
argline += options.windowsVerbatimArguments
|
|
? a
|
|
: this._windowsQuoteCmdArg(a);
|
|
}
|
|
argline += '"';
|
|
return [argline];
|
|
}
|
|
}
|
|
return this.args;
|
|
}
|
|
_endsWith(str, end) {
|
|
return str.endsWith(end);
|
|
}
|
|
_isCmdFile() {
|
|
const upperToolPath = this.toolPath.toUpperCase();
|
|
return (this._endsWith(upperToolPath, '.CMD') ||
|
|
this._endsWith(upperToolPath, '.BAT'));
|
|
}
|
|
_windowsQuoteCmdArg(arg) {
|
|
// for .exe, apply the normal quoting rules that libuv applies
|
|
if (!this._isCmdFile()) {
|
|
return this._uvQuoteCmdArg(arg);
|
|
}
|
|
// otherwise apply quoting rules specific to the cmd.exe command line parser.
|
|
// the libuv rules are generic and are not designed specifically for cmd.exe
|
|
// command line parser.
|
|
//
|
|
// for a detailed description of the cmd.exe command line parser, refer to
|
|
// http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
|
|
// need quotes for empty arg
|
|
if (!arg) {
|
|
return '""';
|
|
}
|
|
// determine whether the arg needs to be quoted
|
|
const cmdSpecialChars = [
|
|
' ',
|
|
'\t',
|
|
'&',
|
|
'(',
|
|
')',
|
|
'[',
|
|
']',
|
|
'{',
|
|
'}',
|
|
'^',
|
|
'=',
|
|
';',
|
|
'!',
|
|
"'",
|
|
'+',
|
|
',',
|
|
'`',
|
|
'~',
|
|
'|',
|
|
'<',
|
|
'>',
|
|
'"'
|
|
];
|
|
let needsQuotes = false;
|
|
for (const char of arg) {
|
|
if (cmdSpecialChars.some(x => x === char)) {
|
|
needsQuotes = true;
|
|
break;
|
|
}
|
|
}
|
|
// short-circuit if quotes not needed
|
|
if (!needsQuotes) {
|
|
return arg;
|
|
}
|
|
// the following quoting rules are very similar to the rules that by libuv applies.
|
|
//
|
|
// 1) wrap the string in quotes
|
|
//
|
|
// 2) double-up quotes - i.e. " => ""
|
|
//
|
|
// this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
|
|
// doesn't work well with a cmd.exe command line.
|
|
//
|
|
// note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
|
|
// for example, the command line:
|
|
// foo.exe "myarg:""my val"""
|
|
// is parsed by a .NET console app into an arg array:
|
|
// [ "myarg:\"my val\"" ]
|
|
// which is the same end result when applying libuv quoting rules. although the actual
|
|
// command line from libuv quoting rules would look like:
|
|
// foo.exe "myarg:\"my val\""
|
|
//
|
|
// 3) double-up slashes that precede a quote,
|
|
// e.g. hello \world => "hello \world"
|
|
// hello\"world => "hello\\""world"
|
|
// hello\\"world => "hello\\\\""world"
|
|
// hello world\ => "hello world\\"
|
|
//
|
|
// technically this is not required for a cmd.exe command line, or the batch argument parser.
|
|
// the reasons for including this as a .cmd quoting rule are:
|
|
//
|
|
// a) this is optimized for the scenario where the argument is passed from the .cmd file to an
|
|
// external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
|
|
//
|
|
// b) it's what we've been doing previously (by deferring to node default behavior) and we
|
|
// haven't heard any complaints about that aspect.
|
|
//
|
|
// note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
|
|
// escaped when used on the command line directly - even though within a .cmd file % can be escaped
|
|
// by using %%.
|
|
//
|
|
// the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
|
|
// the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
|
|
//
|
|
// one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
|
|
// often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
|
|
// variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
|
|
// to an external program.
|
|
//
|
|
// an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
|
|
// % can be escaped within a .cmd file.
|
|
let reverse = '"';
|
|
let quoteHit = true;
|
|
for (let i = arg.length; i > 0; i--) {
|
|
// walk the string in reverse
|
|
reverse += arg[i - 1];
|
|
if (quoteHit && arg[i - 1] === '\\') {
|
|
reverse += '\\'; // double the slash
|
|
}
|
|
else if (arg[i - 1] === '"') {
|
|
quoteHit = true;
|
|
reverse += '"'; // double the quote
|
|
}
|
|
else {
|
|
quoteHit = false;
|
|
}
|
|
}
|
|
reverse += '"';
|
|
return reverse
|
|
.split('')
|
|
.reverse()
|
|
.join('');
|
|
}
|
|
_uvQuoteCmdArg(arg) {
|
|
// Tool runner wraps child_process.spawn() and needs to apply the same quoting as
|
|
// Node in certain cases where the undocumented spawn option windowsVerbatimArguments
|
|
// is used.
|
|
//
|
|
// Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
|
|
// see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
|
|
// pasting copyright notice from Node within this function:
|
|
//
|
|
// Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
//
|
|
// 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.
|
|
if (!arg) {
|
|
// Need double quotation for empty argument
|
|
return '""';
|
|
}
|
|
if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
|
|
// No quotation needed
|
|
return arg;
|
|
}
|
|
if (!arg.includes('"') && !arg.includes('\\')) {
|
|
// No embedded double quotes or backslashes, so I can just wrap
|
|
// quote marks around the whole thing.
|
|
return `"${arg}"`;
|
|
}
|
|
// Expected input/output:
|
|
// input : hello"world
|
|
// output: "hello\"world"
|
|
// input : hello""world
|
|
// output: "hello\"\"world"
|
|
// input : hello\world
|
|
// output: hello\world
|
|
// input : hello\\world
|
|
// output: hello\\world
|
|
// input : hello\"world
|
|
// output: "hello\\\"world"
|
|
// input : hello\\"world
|
|
// output: "hello\\\\\"world"
|
|
// input : hello world\
|
|
// output: "hello world\\" - note the comment in libuv actually reads "hello world\"
|
|
// but it appears the comment is wrong, it should be "hello world\\"
|
|
let reverse = '"';
|
|
let quoteHit = true;
|
|
for (let i = arg.length; i > 0; i--) {
|
|
// walk the string in reverse
|
|
reverse += arg[i - 1];
|
|
if (quoteHit && arg[i - 1] === '\\') {
|
|
reverse += '\\';
|
|
}
|
|
else if (arg[i - 1] === '"') {
|
|
quoteHit = true;
|
|
reverse += '\\';
|
|
}
|
|
else {
|
|
quoteHit = false;
|
|
}
|
|
}
|
|
reverse += '"';
|
|
return reverse
|
|
.split('')
|
|
.reverse()
|
|
.join('');
|
|
}
|
|
_cloneExecOptions(options) {
|
|
options = options || {};
|
|
const result = {
|
|
cwd: options.cwd || process.cwd(),
|
|
env: options.env || process.env,
|
|
silent: options.silent || false,
|
|
windowsVerbatimArguments: options.windowsVerbatimArguments || false,
|
|
failOnStdErr: options.failOnStdErr || false,
|
|
ignoreReturnCode: options.ignoreReturnCode || false,
|
|
delay: options.delay || 10000
|
|
};
|
|
result.outStream = options.outStream || process.stdout;
|
|
result.errStream = options.errStream || process.stderr;
|
|
return result;
|
|
}
|
|
_getSpawnOptions(options, toolPath) {
|
|
options = options || {};
|
|
const result = {};
|
|
result.cwd = options.cwd;
|
|
result.env = options.env;
|
|
result['windowsVerbatimArguments'] =
|
|
options.windowsVerbatimArguments || this._isCmdFile();
|
|
if (options.windowsVerbatimArguments) {
|
|
result.argv0 = `"${toolPath}"`;
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Exec a tool.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with return code
|
|
*
|
|
* @param tool path to tool to exec
|
|
* @param options optional exec options. See ExecOptions
|
|
* @returns number
|
|
*/
|
|
exec() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// root the tool path if it is unrooted and contains relative pathing
|
|
if (!ioUtil.isRooted(this.toolPath) &&
|
|
(this.toolPath.includes('/') ||
|
|
(IS_WINDOWS && this.toolPath.includes('\\')))) {
|
|
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
|
|
this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
|
|
}
|
|
// if the tool is only a file name, then resolve it from the PATH
|
|
// otherwise verify it exists (add extension on Windows if necessary)
|
|
this.toolPath = yield io.which(this.toolPath, true);
|
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
this._debug(`exec tool: ${this.toolPath}`);
|
|
this._debug('arguments:');
|
|
for (const arg of this.args) {
|
|
this._debug(` ${arg}`);
|
|
}
|
|
const optionsNonNull = this._cloneExecOptions(this.options);
|
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
|
optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
|
|
}
|
|
const state = new ExecState(optionsNonNull, this.toolPath);
|
|
state.on('debug', (message) => {
|
|
this._debug(message);
|
|
});
|
|
if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) {
|
|
return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`));
|
|
}
|
|
const fileName = this._getSpawnFileName();
|
|
const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
|
|
let stdbuffer = '';
|
|
if (cp.stdout) {
|
|
cp.stdout.on('data', (data) => {
|
|
if (this.options.listeners && this.options.listeners.stdout) {
|
|
this.options.listeners.stdout(data);
|
|
}
|
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
|
optionsNonNull.outStream.write(data);
|
|
}
|
|
stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => {
|
|
if (this.options.listeners && this.options.listeners.stdline) {
|
|
this.options.listeners.stdline(line);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
let errbuffer = '';
|
|
if (cp.stderr) {
|
|
cp.stderr.on('data', (data) => {
|
|
state.processStderr = true;
|
|
if (this.options.listeners && this.options.listeners.stderr) {
|
|
this.options.listeners.stderr(data);
|
|
}
|
|
if (!optionsNonNull.silent &&
|
|
optionsNonNull.errStream &&
|
|
optionsNonNull.outStream) {
|
|
const s = optionsNonNull.failOnStdErr
|
|
? optionsNonNull.errStream
|
|
: optionsNonNull.outStream;
|
|
s.write(data);
|
|
}
|
|
errbuffer = this._processLineBuffer(data, errbuffer, (line) => {
|
|
if (this.options.listeners && this.options.listeners.errline) {
|
|
this.options.listeners.errline(line);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
cp.on('error', (err) => {
|
|
state.processError = err.message;
|
|
state.processExited = true;
|
|
state.processClosed = true;
|
|
state.CheckComplete();
|
|
});
|
|
cp.on('exit', (code) => {
|
|
state.processExitCode = code;
|
|
state.processExited = true;
|
|
this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
|
|
state.CheckComplete();
|
|
});
|
|
cp.on('close', (code) => {
|
|
state.processExitCode = code;
|
|
state.processExited = true;
|
|
state.processClosed = true;
|
|
this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
|
|
state.CheckComplete();
|
|
});
|
|
state.on('done', (error, exitCode) => {
|
|
if (stdbuffer.length > 0) {
|
|
this.emit('stdline', stdbuffer);
|
|
}
|
|
if (errbuffer.length > 0) {
|
|
this.emit('errline', errbuffer);
|
|
}
|
|
cp.removeAllListeners();
|
|
if (error) {
|
|
reject(error);
|
|
}
|
|
else {
|
|
resolve(exitCode);
|
|
}
|
|
});
|
|
if (this.options.input) {
|
|
if (!cp.stdin) {
|
|
throw new Error('child process missing stdin');
|
|
}
|
|
cp.stdin.end(this.options.input);
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
exports.ToolRunner = ToolRunner;
|
|
/**
|
|
* Convert an arg string to an array of args. Handles escaping
|
|
*
|
|
* @param argString string of arguments
|
|
* @returns string[] array of arguments
|
|
*/
|
|
function argStringToArray(argString) {
|
|
const args = [];
|
|
let inQuotes = false;
|
|
let escaped = false;
|
|
let arg = '';
|
|
function append(c) {
|
|
// we only escape double quotes.
|
|
if (escaped && c !== '"') {
|
|
arg += '\\';
|
|
}
|
|
arg += c;
|
|
escaped = false;
|
|
}
|
|
for (let i = 0; i < argString.length; i++) {
|
|
const c = argString.charAt(i);
|
|
if (c === '"') {
|
|
if (!escaped) {
|
|
inQuotes = !inQuotes;
|
|
}
|
|
else {
|
|
append(c);
|
|
}
|
|
continue;
|
|
}
|
|
if (c === '\\' && escaped) {
|
|
append(c);
|
|
continue;
|
|
}
|
|
if (c === '\\' && inQuotes) {
|
|
escaped = true;
|
|
continue;
|
|
}
|
|
if (c === ' ' && !inQuotes) {
|
|
if (arg.length > 0) {
|
|
args.push(arg);
|
|
arg = '';
|
|
}
|
|
continue;
|
|
}
|
|
append(c);
|
|
}
|
|
if (arg.length > 0) {
|
|
args.push(arg.trim());
|
|
}
|
|
return args;
|
|
}
|
|
exports.argStringToArray = argStringToArray;
|
|
class ExecState extends events.EventEmitter {
|
|
constructor(options, toolPath) {
|
|
super();
|
|
this.processClosed = false; // tracks whether the process has exited and stdio is closed
|
|
this.processError = '';
|
|
this.processExitCode = 0;
|
|
this.processExited = false; // tracks whether the process has exited
|
|
this.processStderr = false; // tracks whether stderr was written to
|
|
this.delay = 10000; // 10 seconds
|
|
this.done = false;
|
|
this.timeout = null;
|
|
if (!toolPath) {
|
|
throw new Error('toolPath must not be empty');
|
|
}
|
|
this.options = options;
|
|
this.toolPath = toolPath;
|
|
if (options.delay) {
|
|
this.delay = options.delay;
|
|
}
|
|
}
|
|
CheckComplete() {
|
|
if (this.done) {
|
|
return;
|
|
}
|
|
if (this.processClosed) {
|
|
this._setResult();
|
|
}
|
|
else if (this.processExited) {
|
|
this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this);
|
|
}
|
|
}
|
|
_debug(message) {
|
|
this.emit('debug', message);
|
|
}
|
|
_setResult() {
|
|
// determine whether there is an error
|
|
let error;
|
|
if (this.processExited) {
|
|
if (this.processError) {
|
|
error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
|
|
}
|
|
else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
|
|
error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
|
|
}
|
|
else if (this.processStderr && this.options.failOnStdErr) {
|
|
error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
|
|
}
|
|
}
|
|
// clear the timeout
|
|
if (this.timeout) {
|
|
clearTimeout(this.timeout);
|
|
this.timeout = null;
|
|
}
|
|
this.done = true;
|
|
this.emit('done', error, this.processExitCode);
|
|
}
|
|
static HandleTimeout(state) {
|
|
if (state.done) {
|
|
return;
|
|
}
|
|
if (!state.processClosed && state.processExited) {
|
|
const message = `The STDIO streams did not close within ${state.delay /
|
|
1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
|
|
state._debug(message);
|
|
}
|
|
state._setResult();
|
|
}
|
|
}
|
|
//# sourceMappingURL=toolrunner.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4087:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.Context = void 0;
|
|
const fs_1 = __nccwpck_require__(7147);
|
|
const os_1 = __nccwpck_require__(2037);
|
|
class Context {
|
|
/**
|
|
* Hydrate the context from the environment
|
|
*/
|
|
constructor() {
|
|
var _a, _b, _c;
|
|
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`;
|
|
}
|
|
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
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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:
|
|
/***/ (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.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;
|
|
const httpClient = __importStar(__nccwpck_require__(6255));
|
|
function getAuthString(token, options) {
|
|
if (!token && !options.auth) {
|
|
throw new Error('Parameter token or opts.auth is required');
|
|
}
|
|
else if (token && options.auth) {
|
|
throw new Error('Parameters token and opts.auth may not both be specified');
|
|
}
|
|
return typeof options.auth === 'string' ? options.auth : `token ${token}`;
|
|
}
|
|
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';
|
|
}
|
|
exports.getApiBaseUrl = getApiBaseUrl;
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3030:
|
|
/***/ (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.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);
|
|
/**
|
|
* Convience function to correctly format Octokit Options to pass into the constructor.
|
|
*
|
|
* @param token the repo PAT or GITHUB_TOKEN
|
|
* @param options other options to set
|
|
*/
|
|
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;
|
|
}
|
|
return opts;
|
|
}
|
|
exports.getOctokitOptions = getOctokitOptions;
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5526:
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
"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.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;
|
|
class BasicCredentialHandler {
|
|
constructor(username, password) {
|
|
this.username = username;
|
|
this.password = password;
|
|
}
|
|
prepareRequest(options) {
|
|
if (!options.headers) {
|
|
throw Error('The request has no headers');
|
|
}
|
|
options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
throw new Error('not implemented');
|
|
});
|
|
}
|
|
}
|
|
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) {
|
|
if (!options.headers) {
|
|
throw Error('The request has no headers');
|
|
}
|
|
options.headers['Authorization'] = `Bearer ${this.token}`;
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
throw new Error('not implemented');
|
|
});
|
|
}
|
|
}
|
|
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) {
|
|
if (!options.headers) {
|
|
throw Error('The request has no headers');
|
|
}
|
|
options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication() {
|
|
return false;
|
|
}
|
|
handleAuthentication() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
throw new Error('not implemented');
|
|
});
|
|
}
|
|
}
|
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
|
//# sourceMappingURL=auth.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6255:
|
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
|
|
"use strict";
|
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
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;
|
|
};
|
|
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.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;
|
|
const http = __importStar(__nccwpck_require__(3685));
|
|
const https = __importStar(__nccwpck_require__(5687));
|
|
const pm = __importStar(__nccwpck_require__(9835));
|
|
const tunnel = __importStar(__nccwpck_require__(4294));
|
|
var HttpCodes;
|
|
(function (HttpCodes) {
|
|
HttpCodes[HttpCodes["OK"] = 200] = "OK";
|
|
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
|
|
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
|
|
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
|
|
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
|
|
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
|
|
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
|
|
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
|
|
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
|
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
|
|
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
|
|
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
|
|
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
|
|
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
|
|
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
|
|
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
|
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
|
|
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
|
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
|
|
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
|
|
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
|
|
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
|
|
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
|
|
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
|
|
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
|
|
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
|
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
|
|
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
|
|
var Headers;
|
|
(function (Headers) {
|
|
Headers["Accept"] = "accept";
|
|
Headers["ContentType"] = "content-type";
|
|
})(Headers = exports.Headers || (exports.Headers = {}));
|
|
var MediaTypes;
|
|
(function (MediaTypes) {
|
|
MediaTypes["ApplicationJson"] = "application/json";
|
|
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
|
|
/**
|
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
|
*/
|
|
function getProxyUrl(serverUrl) {
|
|
const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
|
|
return proxyUrl ? proxyUrl.href : '';
|
|
}
|
|
exports.getProxyUrl = getProxyUrl;
|
|
const HttpRedirectCodes = [
|
|
HttpCodes.MovedPermanently,
|
|
HttpCodes.ResourceMoved,
|
|
HttpCodes.SeeOther,
|
|
HttpCodes.TemporaryRedirect,
|
|
HttpCodes.PermanentRedirect
|
|
];
|
|
const HttpResponseRetryCodes = [
|
|
HttpCodes.BadGateway,
|
|
HttpCodes.ServiceUnavailable,
|
|
HttpCodes.GatewayTimeout
|
|
];
|
|
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
|
|
const ExponentialBackoffCeiling = 10;
|
|
const ExponentialBackoffTimeSlice = 5;
|
|
class HttpClientError extends Error {
|
|
constructor(message, statusCode) {
|
|
super(message);
|
|
this.name = 'HttpClientError';
|
|
this.statusCode = statusCode;
|
|
Object.setPrototypeOf(this, HttpClientError.prototype);
|
|
}
|
|
}
|
|
exports.HttpClientError = HttpClientError;
|
|
class HttpClientResponse {
|
|
constructor(message) {
|
|
this.message = message;
|
|
}
|
|
readBody() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
let output = Buffer.alloc(0);
|
|
this.message.on('data', (chunk) => {
|
|
output = Buffer.concat([output, chunk]);
|
|
});
|
|
this.message.on('end', () => {
|
|
resolve(output.toString());
|
|
});
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClientResponse = HttpClientResponse;
|
|
function isHttps(requestUrl) {
|
|
const parsedUrl = new URL(requestUrl);
|
|
return parsedUrl.protocol === 'https:';
|
|
}
|
|
exports.isHttps = isHttps;
|
|
class HttpClient {
|
|
constructor(userAgent, handlers, requestOptions) {
|
|
this._ignoreSslError = false;
|
|
this._allowRedirects = true;
|
|
this._allowRedirectDowngrade = false;
|
|
this._maxRedirects = 50;
|
|
this._allowRetries = false;
|
|
this._maxRetries = 1;
|
|
this._keepAlive = false;
|
|
this._disposed = false;
|
|
this.userAgent = userAgent;
|
|
this.handlers = handlers || [];
|
|
this.requestOptions = requestOptions;
|
|
if (requestOptions) {
|
|
if (requestOptions.ignoreSslError != null) {
|
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
|
}
|
|
this._socketTimeout = requestOptions.socketTimeout;
|
|
if (requestOptions.allowRedirects != null) {
|
|
this._allowRedirects = requestOptions.allowRedirects;
|
|
}
|
|
if (requestOptions.allowRedirectDowngrade != null) {
|
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
|
}
|
|
if (requestOptions.maxRedirects != null) {
|
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
|
}
|
|
if (requestOptions.keepAlive != null) {
|
|
this._keepAlive = requestOptions.keepAlive;
|
|
}
|
|
if (requestOptions.allowRetries != null) {
|
|
this._allowRetries = requestOptions.allowRetries;
|
|
}
|
|
if (requestOptions.maxRetries != null) {
|
|
this._maxRetries = requestOptions.maxRetries;
|
|
}
|
|
}
|
|
}
|
|
options(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
get(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('GET', requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
del(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
post(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('POST', requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
patch(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
put(requestUrl, data, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('PUT', requestUrl, data, additionalHeaders || {});
|
|
});
|
|
}
|
|
head(requestUrl, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
|
|
});
|
|
}
|
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
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
|
|
*/
|
|
getJson(requestUrl, additionalHeaders = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
const res = yield this.get(requestUrl, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
postJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const 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);
|
|
const res = yield this.post(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
putJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const 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);
|
|
const res = yield this.put(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
});
|
|
}
|
|
patchJson(requestUrl, obj, additionalHeaders = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const 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);
|
|
const res = yield 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
|
|
*/
|
|
request(verb, requestUrl, data, headers) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (this._disposed) {
|
|
throw new Error('Client has already been disposed.');
|
|
}
|
|
const parsedUrl = new URL(requestUrl);
|
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
|
// Only perform retries on reads since writes may not be idempotent.
|
|
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)
|
|
? this._maxRetries + 1
|
|
: 1;
|
|
let numTries = 0;
|
|
let response;
|
|
do {
|
|
response = yield this.requestRaw(info, data);
|
|
// Check if it's an authentication challenge
|
|
if (response &&
|
|
response.message &&
|
|
response.message.statusCode === HttpCodes.Unauthorized) {
|
|
let authenticationHandler;
|
|
for (const handler of this.handlers) {
|
|
if (handler.canHandleAuthentication(response)) {
|
|
authenticationHandler = handler;
|
|
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 (response.message.statusCode &&
|
|
HttpRedirectCodes.includes(response.message.statusCode) &&
|
|
this._allowRedirects &&
|
|
redirectsRemaining > 0) {
|
|
const redirectUrl = response.message.headers['location'];
|
|
if (!redirectUrl) {
|
|
// if there's no location to redirect to, we won't
|
|
break;
|
|
}
|
|
const 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.
|
|
yield response.readBody();
|
|
// strip authorization header if redirected to a different hostname
|
|
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
|
|
for (const 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 = yield this.requestRaw(info, data);
|
|
redirectsRemaining--;
|
|
}
|
|
if (!response.message.statusCode ||
|
|
!HttpResponseRetryCodes.includes(response.message.statusCode)) {
|
|
// If not a retry code, return immediately instead of retrying
|
|
return response;
|
|
}
|
|
numTries += 1;
|
|
if (numTries < maxTries) {
|
|
yield response.readBody();
|
|
yield this._performExponentialBackoff(numTries);
|
|
}
|
|
} while (numTries < maxTries);
|
|
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 __awaiter(this, void 0, void 0, function* () {
|
|
return new Promise((resolve, reject) => {
|
|
function callbackForResult(err, res) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else if (!res) {
|
|
// If `err` is not passed, then `res` must be passed.
|
|
reject(new Error('Unknown error'));
|
|
}
|
|
else {
|
|
resolve(res);
|
|
}
|
|
}
|
|
this.requestRawWithCallback(info, data, callbackForResult);
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* Raw request with callback.
|
|
* @param info
|
|
* @param data
|
|
* @param onResult
|
|
*/
|
|
requestRawWithCallback(info, data, onResult) {
|
|
if (typeof data === 'string') {
|
|
if (!info.options.headers) {
|
|
info.options.headers = {};
|
|
}
|
|
info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
|
|
}
|
|
let callbackCalled = false;
|
|
function handleResult(err, res) {
|
|
if (!callbackCalled) {
|
|
callbackCalled = true;
|
|
onResult(err, res);
|
|
}
|
|
}
|
|
const req = info.httpModule.request(info.options, (msg) => {
|
|
const res = new HttpClientResponse(msg);
|
|
handleResult(undefined, res);
|
|
});
|
|
let socket;
|
|
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}`));
|
|
});
|
|
req.on('error', function (err) {
|
|
// err has statusCode property
|
|
// res should have headers
|
|
handleResult(err);
|
|
});
|
|
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) {
|
|
const 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) {
|
|
for (const handler of this.handlers) {
|
|
handler.prepareRequest(info.options);
|
|
}
|
|
}
|
|
return info;
|
|
}
|
|
_mergeHeaders(headers) {
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
|
|
}
|
|
return lowercaseKeys(headers || {});
|
|
}
|
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
|
let clientHeader;
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
|
}
|
|
return additionalHeaders[header] || clientHeader || _default;
|
|
}
|
|
_getAgent(parsedUrl) {
|
|
let agent;
|
|
const proxyUrl = pm.getProxyUrl(parsedUrl);
|
|
const 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;
|
|
}
|
|
// This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
|
|
if (proxyUrl && proxyUrl.hostname) {
|
|
const agentOptions = {
|
|
maxSockets,
|
|
keepAlive: this._keepAlive,
|
|
proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {
|
|
proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
|
|
})), { 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 };
|
|
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) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
|
return new Promise(resolve => setTimeout(() => resolve(), ms));
|
|
});
|
|
}
|
|
_processResponse(res, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
const statusCode = res.message.statusCode || 0;
|
|
const response = {
|
|
statusCode,
|
|
result: null,
|
|
headers: {}
|
|
};
|
|
// not found leads to null obj returned
|
|
if (statusCode === HttpCodes.NotFound) {
|
|
resolve(response);
|
|
}
|
|
// get the result from the body
|
|
function dateTimeDeserializer(key, value) {
|
|
if (typeof value === 'string') {
|
|
const a = new Date(value);
|
|
if (!isNaN(a.valueOf())) {
|
|
return a;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
let obj;
|
|
let contents;
|
|
try {
|
|
contents = yield res.readBody();
|
|
if (contents && contents.length > 0) {
|
|
if (options && options.deserializeDates) {
|
|
obj = JSON.parse(contents, 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})`;
|
|
}
|
|
const err = new HttpClientError(msg, statusCode);
|
|
err.result = response.result;
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(response);
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClient = HttpClient;
|
|
const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9835:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.checkBypass = exports.getProxyUrl = void 0;
|
|
function getProxyUrl(reqUrl) {
|
|
const usingSsl = reqUrl.protocol === 'https:';
|
|
if (checkBypass(reqUrl)) {
|
|
return undefined;
|
|
}
|
|
const proxyVar = (() => {
|
|
if (usingSsl) {
|
|
return process.env['https_proxy'] || process.env['HTTPS_PROXY'];
|
|
}
|
|
else {
|
|
return process.env['http_proxy'] || process.env['HTTP_PROXY'];
|
|
}
|
|
})();
|
|
if (proxyVar) {
|
|
return new URL(proxyVar);
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
exports.getProxyUrl = getProxyUrl;
|
|
function checkBypass(reqUrl) {
|
|
if (!reqUrl.hostname) {
|
|
return false;
|
|
}
|
|
const 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
|
|
const upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
|
if (typeof reqPort === 'number') {
|
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
|
}
|
|
// Compare request host against noproxy
|
|
for (const upperNoProxyItem of noProxy
|
|
.split(',')
|
|
.map(x => x.trim().toUpperCase())
|
|
.filter(x => x)) {
|
|
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
exports.checkBypass = checkBypass;
|
|
//# sourceMappingURL=proxy.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1962:
|
|
/***/ (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;
|
|
};
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
};
|
|
var _a;
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0;
|
|
const fs = __importStar(__nccwpck_require__(7147));
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
|
|
exports.IS_WINDOWS = process.platform === 'win32';
|
|
function exists(fsPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield exports.stat(fsPath);
|
|
}
|
|
catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
return false;
|
|
}
|
|
throw err;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
exports.exists = exists;
|
|
function isDirectory(fsPath, useStat = false) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
|
|
return stats.isDirectory();
|
|
});
|
|
}
|
|
exports.isDirectory = isDirectory;
|
|
/**
|
|
* On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
|
|
* \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
|
|
*/
|
|
function isRooted(p) {
|
|
p = normalizeSeparators(p);
|
|
if (!p) {
|
|
throw new Error('isRooted() parameter "p" cannot be empty');
|
|
}
|
|
if (exports.IS_WINDOWS) {
|
|
return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
|
|
); // e.g. C: or C:\hello
|
|
}
|
|
return p.startsWith('/');
|
|
}
|
|
exports.isRooted = isRooted;
|
|
/**
|
|
* Best effort attempt to determine whether a file exists and is executable.
|
|
* @param filePath file path to check
|
|
* @param extensions additional file extensions to try
|
|
* @return if file exists and is executable, returns the file path. otherwise empty string.
|
|
*/
|
|
function tryGetExecutablePath(filePath, extensions) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let stats = undefined;
|
|
try {
|
|
// test file exists
|
|
stats = yield exports.stat(filePath);
|
|
}
|
|
catch (err) {
|
|
if (err.code !== 'ENOENT') {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
|
}
|
|
}
|
|
if (stats && stats.isFile()) {
|
|
if (exports.IS_WINDOWS) {
|
|
// on Windows, test for valid extension
|
|
const upperExt = path.extname(filePath).toUpperCase();
|
|
if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
else {
|
|
if (isUnixExecutable(stats)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
}
|
|
// try each extension
|
|
const originalFilePath = filePath;
|
|
for (const extension of extensions) {
|
|
filePath = originalFilePath + extension;
|
|
stats = undefined;
|
|
try {
|
|
stats = yield exports.stat(filePath);
|
|
}
|
|
catch (err) {
|
|
if (err.code !== 'ENOENT') {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
|
}
|
|
}
|
|
if (stats && stats.isFile()) {
|
|
if (exports.IS_WINDOWS) {
|
|
// preserve the case of the actual file (since an extension was appended)
|
|
try {
|
|
const directory = path.dirname(filePath);
|
|
const upperName = path.basename(filePath).toUpperCase();
|
|
for (const actualName of yield exports.readdir(directory)) {
|
|
if (upperName === actualName.toUpperCase()) {
|
|
filePath = path.join(directory, actualName);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (err) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
|
|
}
|
|
return filePath;
|
|
}
|
|
else {
|
|
if (isUnixExecutable(stats)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return '';
|
|
});
|
|
}
|
|
exports.tryGetExecutablePath = tryGetExecutablePath;
|
|
function normalizeSeparators(p) {
|
|
p = p || '';
|
|
if (exports.IS_WINDOWS) {
|
|
// convert slashes on Windows
|
|
p = p.replace(/\//g, '\\');
|
|
// remove redundant slashes
|
|
return p.replace(/\\\\+/g, '\\');
|
|
}
|
|
// remove redundant slashes
|
|
return p.replace(/\/\/+/g, '/');
|
|
}
|
|
// on Mac/Linux, test the execute bit
|
|
// R W X R W X R W X
|
|
// 256 128 64 32 16 8 4 2 1
|
|
function isUnixExecutable(stats) {
|
|
return ((stats.mode & 1) > 0 ||
|
|
((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
|
|
((stats.mode & 64) > 0 && stats.uid === process.getuid()));
|
|
}
|
|
// Get the path of cmd.exe in windows
|
|
function getCmdPath() {
|
|
var _a;
|
|
return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`;
|
|
}
|
|
exports.getCmdPath = getCmdPath;
|
|
//# sourceMappingURL=io-util.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7436:
|
|
/***/ (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;
|
|
};
|
|
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.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0;
|
|
const assert_1 = __nccwpck_require__(9491);
|
|
const childProcess = __importStar(__nccwpck_require__(2081));
|
|
const path = __importStar(__nccwpck_require__(1017));
|
|
const util_1 = __nccwpck_require__(3837);
|
|
const ioUtil = __importStar(__nccwpck_require__(1962));
|
|
const exec = util_1.promisify(childProcess.exec);
|
|
const execFile = util_1.promisify(childProcess.execFile);
|
|
/**
|
|
* Copies a file or folder.
|
|
* Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
|
|
*
|
|
* @param source source path
|
|
* @param dest destination path
|
|
* @param options optional. See CopyOptions.
|
|
*/
|
|
function cp(source, dest, options = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const { force, recursive, copySourceDirectory } = readCopyOptions(options);
|
|
const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
|
|
// Dest is an existing file, but not forcing
|
|
if (destStat && destStat.isFile() && !force) {
|
|
return;
|
|
}
|
|
// If dest is an existing directory, should copy inside.
|
|
const newDest = destStat && destStat.isDirectory() && copySourceDirectory
|
|
? path.join(dest, path.basename(source))
|
|
: dest;
|
|
if (!(yield ioUtil.exists(source))) {
|
|
throw new Error(`no such file or directory: ${source}`);
|
|
}
|
|
const sourceStat = yield ioUtil.stat(source);
|
|
if (sourceStat.isDirectory()) {
|
|
if (!recursive) {
|
|
throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
|
|
}
|
|
else {
|
|
yield cpDirRecursive(source, newDest, 0, force);
|
|
}
|
|
}
|
|
else {
|
|
if (path.relative(source, newDest) === '') {
|
|
// a file cannot be copied to itself
|
|
throw new Error(`'${newDest}' and '${source}' are the same file`);
|
|
}
|
|
yield copyFile(source, newDest, force);
|
|
}
|
|
});
|
|
}
|
|
exports.cp = cp;
|
|
/**
|
|
* Moves a path.
|
|
*
|
|
* @param source source path
|
|
* @param dest destination path
|
|
* @param options optional. See MoveOptions.
|
|
*/
|
|
function mv(source, dest, options = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (yield ioUtil.exists(dest)) {
|
|
let destExists = true;
|
|
if (yield ioUtil.isDirectory(dest)) {
|
|
// If dest is directory copy src into dest
|
|
dest = path.join(dest, path.basename(source));
|
|
destExists = yield ioUtil.exists(dest);
|
|
}
|
|
if (destExists) {
|
|
if (options.force == null || options.force) {
|
|
yield rmRF(dest);
|
|
}
|
|
else {
|
|
throw new Error('Destination already exists');
|
|
}
|
|
}
|
|
}
|
|
yield mkdirP(path.dirname(dest));
|
|
yield ioUtil.rename(source, dest);
|
|
});
|
|
}
|
|
exports.mv = mv;
|
|
/**
|
|
* Remove a path recursively with force
|
|
*
|
|
* @param inputPath path to remove
|
|
*/
|
|
function rmRF(inputPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (ioUtil.IS_WINDOWS) {
|
|
// Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
|
|
// program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
|
|
// Check for invalid characters
|
|
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
|
if (/[*"<>|]/.test(inputPath)) {
|
|
throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');
|
|
}
|
|
try {
|
|
const cmdPath = ioUtil.getCmdPath();
|
|
if (yield ioUtil.isDirectory(inputPath, true)) {
|
|
yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, {
|
|
env: { inputPath }
|
|
});
|
|
}
|
|
else {
|
|
yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, {
|
|
env: { inputPath }
|
|
});
|
|
}
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
}
|
|
// Shelling out fails to remove a symlink folder with missing source, this unlink catches that
|
|
try {
|
|
yield ioUtil.unlink(inputPath);
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
}
|
|
}
|
|
else {
|
|
let isDir = false;
|
|
try {
|
|
isDir = yield ioUtil.isDirectory(inputPath);
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
return;
|
|
}
|
|
if (isDir) {
|
|
yield execFile(`rm`, [`-rf`, `${inputPath}`]);
|
|
}
|
|
else {
|
|
yield ioUtil.unlink(inputPath);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
exports.rmRF = rmRF;
|
|
/**
|
|
* Make a directory. Creates the full path with folders in between
|
|
* Will throw if it fails
|
|
*
|
|
* @param fsPath path to create
|
|
* @returns Promise<void>
|
|
*/
|
|
function mkdirP(fsPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
|
yield ioUtil.mkdir(fsPath, { recursive: true });
|
|
});
|
|
}
|
|
exports.mkdirP = mkdirP;
|
|
/**
|
|
* Returns path of a tool had the tool actually been invoked. Resolves via paths.
|
|
* If you check and the tool does not exist, it will throw.
|
|
*
|
|
* @param tool name of the tool
|
|
* @param check whether to check if tool exists
|
|
* @returns Promise<string> path to tool
|
|
*/
|
|
function which(tool, check) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (!tool) {
|
|
throw new Error("parameter 'tool' is required");
|
|
}
|
|
// recursive when check=true
|
|
if (check) {
|
|
const result = yield which(tool, false);
|
|
if (!result) {
|
|
if (ioUtil.IS_WINDOWS) {
|
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
|
|
}
|
|
else {
|
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
const matches = yield findInPath(tool);
|
|
if (matches && matches.length > 0) {
|
|
return matches[0];
|
|
}
|
|
return '';
|
|
});
|
|
}
|
|
exports.which = which;
|
|
/**
|
|
* Returns a list of all occurrences of the given tool on the system path.
|
|
*
|
|
* @returns Promise<string[]> the paths of the tool
|
|
*/
|
|
function findInPath(tool) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (!tool) {
|
|
throw new Error("parameter 'tool' is required");
|
|
}
|
|
// build the list of extensions to try
|
|
const extensions = [];
|
|
if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) {
|
|
for (const extension of process.env['PATHEXT'].split(path.delimiter)) {
|
|
if (extension) {
|
|
extensions.push(extension);
|
|
}
|
|
}
|
|
}
|
|
// if it's rooted, return it if exists. otherwise return empty.
|
|
if (ioUtil.isRooted(tool)) {
|
|
const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
|
|
if (filePath) {
|
|
return [filePath];
|
|
}
|
|
return [];
|
|
}
|
|
// if any path separators, return empty
|
|
if (tool.includes(path.sep)) {
|
|
return [];
|
|
}
|
|
// build the list of directories
|
|
//
|
|
// Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
|
|
// it feels like we should not do this. Checking the current directory seems like more of a use
|
|
// case of a shell, and the which() function exposed by the toolkit should strive for consistency
|
|
// across platforms.
|
|
const directories = [];
|
|
if (process.env.PATH) {
|
|
for (const p of process.env.PATH.split(path.delimiter)) {
|
|
if (p) {
|
|
directories.push(p);
|
|
}
|
|
}
|
|
}
|
|
// find all matches
|
|
const matches = [];
|
|
for (const directory of directories) {
|
|
const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions);
|
|
if (filePath) {
|
|
matches.push(filePath);
|
|
}
|
|
}
|
|
return matches;
|
|
});
|
|
}
|
|
exports.findInPath = findInPath;
|
|
function readCopyOptions(options) {
|
|
const force = options.force == null ? true : options.force;
|
|
const recursive = Boolean(options.recursive);
|
|
const copySourceDirectory = options.copySourceDirectory == null
|
|
? true
|
|
: Boolean(options.copySourceDirectory);
|
|
return { force, recursive, copySourceDirectory };
|
|
}
|
|
function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Ensure there is not a run away recursive copy
|
|
if (currentDepth >= 255)
|
|
return;
|
|
currentDepth++;
|
|
yield mkdirP(destDir);
|
|
const files = yield ioUtil.readdir(sourceDir);
|
|
for (const fileName of files) {
|
|
const srcFile = `${sourceDir}/${fileName}`;
|
|
const destFile = `${destDir}/${fileName}`;
|
|
const srcFileStat = yield ioUtil.lstat(srcFile);
|
|
if (srcFileStat.isDirectory()) {
|
|
// Recurse
|
|
yield cpDirRecursive(srcFile, destFile, currentDepth, force);
|
|
}
|
|
else {
|
|
yield copyFile(srcFile, destFile, force);
|
|
}
|
|
}
|
|
// Change the mode for the newly created directory
|
|
yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
|
|
});
|
|
}
|
|
// Buffered file copy
|
|
function copyFile(srcFile, destFile, force) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
|
|
// unlink/re-link it
|
|
try {
|
|
yield ioUtil.lstat(destFile);
|
|
yield ioUtil.unlink(destFile);
|
|
}
|
|
catch (e) {
|
|
// Try to override file permission
|
|
if (e.code === 'EPERM') {
|
|
yield ioUtil.chmod(destFile, '0666');
|
|
yield ioUtil.unlink(destFile);
|
|
}
|
|
// other errors = it doesn't exist, no work to do
|
|
}
|
|
// Copy over symlink
|
|
const symlinkFull = yield ioUtil.readlink(srcFile);
|
|
yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
|
|
}
|
|
else if (!(yield ioUtil.exists(destFile)) || force) {
|
|
yield ioUtil.copyFile(srcFile, destFile);
|
|
}
|
|
});
|
|
}
|
|
//# sourceMappingURL=io.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3803:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
|
|
const fs = __nccwpck_require__(7147);
|
|
exports.FILE_SYSTEM_ADAPTER = {
|
|
lstat: fs.lstat,
|
|
stat: fs.stat,
|
|
lstatSync: fs.lstatSync,
|
|
statSync: fs.statSync,
|
|
readdir: fs.readdir,
|
|
readdirSync: fs.readdirSync
|
|
};
|
|
function createFileSystemAdapter(fsMethods) {
|
|
if (fsMethods === undefined) {
|
|
return exports.FILE_SYSTEM_ADAPTER;
|
|
}
|
|
return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
|
|
}
|
|
exports.createFileSystemAdapter = createFileSystemAdapter;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8838:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;
|
|
const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
|
|
if (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {
|
|
throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);
|
|
}
|
|
const MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
|
|
const MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
|
|
const SUPPORTED_MAJOR_VERSION = 10;
|
|
const SUPPORTED_MINOR_VERSION = 10;
|
|
const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
|
|
const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
|
|
/**
|
|
* IS `true` for Node.js 10.10 and greater.
|
|
*/
|
|
exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5667:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.Settings = exports.scandirSync = exports.scandir = void 0;
|
|
const async = __nccwpck_require__(4507);
|
|
const sync = __nccwpck_require__(9560);
|
|
const settings_1 = __nccwpck_require__(8662);
|
|
exports.Settings = settings_1.default;
|
|
function scandir(path, optionsOrSettingsOrCallback, callback) {
|
|
if (typeof optionsOrSettingsOrCallback === 'function') {
|
|
async.read(path, getSettings(), optionsOrSettingsOrCallback);
|
|
return;
|
|
}
|
|
async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
|
|
}
|
|
exports.scandir = scandir;
|
|
function scandirSync(path, optionsOrSettings) {
|
|
const settings = getSettings(optionsOrSettings);
|
|
return sync.read(path, settings);
|
|
}
|
|
exports.scandirSync = scandirSync;
|
|
function getSettings(settingsOrOptions = {}) {
|
|
if (settingsOrOptions instanceof settings_1.default) {
|
|
return settingsOrOptions;
|
|
}
|
|
return new settings_1.default(settingsOrOptions);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4507:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.readdir = exports.readdirWithFileTypes = exports.read = void 0;
|
|
const fsStat = __nccwpck_require__(109);
|
|
const rpl = __nccwpck_require__(5288);
|
|
const constants_1 = __nccwpck_require__(8838);
|
|
const utils = __nccwpck_require__(6297);
|
|
const common = __nccwpck_require__(3847);
|
|
function read(directory, settings, callback) {
|
|
if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
|
|
readdirWithFileTypes(directory, settings, callback);
|
|
return;
|
|
}
|
|
readdir(directory, settings, callback);
|
|
}
|
|
exports.read = read;
|
|
function readdirWithFileTypes(directory, settings, callback) {
|
|
settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
|
|
if (readdirError !== null) {
|
|
callFailureCallback(callback, readdirError);
|
|
return;
|
|
}
|
|
const entries = dirents.map((dirent) => ({
|
|
dirent,
|
|
name: dirent.name,
|
|
path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
|
|
}));
|
|
if (!settings.followSymbolicLinks) {
|
|
callSuccessCallback(callback, entries);
|
|
return;
|
|
}
|
|
const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
|
|
rpl(tasks, (rplError, rplEntries) => {
|
|
if (rplError !== null) {
|
|
callFailureCallback(callback, rplError);
|
|
return;
|
|
}
|
|
callSuccessCallback(callback, rplEntries);
|
|
});
|
|
});
|
|
}
|
|
exports.readdirWithFileTypes = readdirWithFileTypes;
|
|
function makeRplTaskEntry(entry, settings) {
|
|
return (done) => {
|
|
if (!entry.dirent.isSymbolicLink()) {
|
|
done(null, entry);
|
|
return;
|
|
}
|
|
settings.fs.stat(entry.path, (statError, stats) => {
|
|
if (statError !== null) {
|
|
if (settings.throwErrorOnBrokenSymbolicLink) {
|
|
done(statError);
|
|
return;
|
|
}
|
|
done(null, entry);
|
|
return;
|
|
}
|
|
entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
|
|
done(null, entry);
|
|
});
|
|
};
|
|
}
|
|
function readdir(directory, settings, callback) {
|
|
settings.fs.readdir(directory, (readdirError, names) => {
|
|
if (readdirError !== null) {
|
|
callFailureCallback(callback, readdirError);
|
|
return;
|
|
}
|
|
const tasks = names.map((name) => {
|
|
const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
|
|
return (done) => {
|
|
fsStat.stat(path, settings.fsStatSettings, (error, stats) => {
|
|
if (error !== null) {
|
|
done(error);
|
|
return;
|
|
}
|
|
const entry = {
|
|
name,
|
|
path,
|
|
dirent: utils.fs.createDirentFromStats(name, stats)
|
|
};
|
|
if (settings.stats) {
|
|
entry.stats = stats;
|
|
}
|
|
done(null, entry);
|
|
});
|
|
};
|
|
});
|
|
rpl(tasks, (rplError, entries) => {
|
|
if (rplError !== null) {
|
|
callFailureCallback(callback, rplError);
|
|
return;
|
|
}
|
|
callSuccessCallback(callback, entries);
|
|
});
|
|
});
|
|
}
|
|
exports.readdir = readdir;
|
|
function callFailureCallback(callback, error) {
|
|
callback(error);
|
|
}
|
|
function callSuccessCallback(callback, result) {
|
|
callback(null, result);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3847:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.joinPathSegments = void 0;
|
|
function joinPathSegments(a, b, separator) {
|
|
/**
|
|
* The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).
|
|
*/
|
|
if (a.endsWith(separator)) {
|
|
return a + b;
|
|
}
|
|
return a + separator + b;
|
|
}
|
|
exports.joinPathSegments = joinPathSegments;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9560:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.readdir = exports.readdirWithFileTypes = exports.read = void 0;
|
|
const fsStat = __nccwpck_require__(109);
|
|
const constants_1 = __nccwpck_require__(8838);
|
|
const utils = __nccwpck_require__(6297);
|
|
const common = __nccwpck_require__(3847);
|
|
function read(directory, settings) {
|
|
if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
|
|
return readdirWithFileTypes(directory, settings);
|
|
}
|
|
return readdir(directory, settings);
|
|
}
|
|
exports.read = read;
|
|
function readdirWithFileTypes(directory, settings) {
|
|
const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
|
|
return dirents.map((dirent) => {
|
|
const entry = {
|
|
dirent,
|
|
name: dirent.name,
|
|
path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)
|
|
};
|
|
if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
|
|
try {
|
|
const stats = settings.fs.statSync(entry.path);
|
|
entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
|
|
}
|
|
catch (error) {
|
|
if (settings.throwErrorOnBrokenSymbolicLink) {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
return entry;
|
|
});
|
|
}
|
|
exports.readdirWithFileTypes = readdirWithFileTypes;
|
|
function readdir(directory, settings) {
|
|
const names = settings.fs.readdirSync(directory);
|
|
return names.map((name) => {
|
|
const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);
|
|
const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
|
|
const entry = {
|
|
name,
|
|
path: entryPath,
|
|
dirent: utils.fs.createDirentFromStats(name, stats)
|
|
};
|
|
if (settings.stats) {
|
|
entry.stats = stats;
|
|
}
|
|
return entry;
|
|
});
|
|
}
|
|
exports.readdir = readdir;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8662:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const path = __nccwpck_require__(1017);
|
|
const fsStat = __nccwpck_require__(109);
|
|
const fs = __nccwpck_require__(3803);
|
|
class Settings {
|
|
constructor(_options = {}) {
|
|
this._options = _options;
|
|
this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
|
|
this.fs = fs.createFileSystemAdapter(this._options.fs);
|
|
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
|
|
this.stats = this._getValue(this._options.stats, false);
|
|
this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
|
|
this.fsStatSettings = new fsStat.Settings({
|
|
followSymbolicLink: this.followSymbolicLinks,
|
|
fs: this.fs,
|
|
throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
|
|
});
|
|
}
|
|
_getValue(option, value) {
|
|
return option !== null && option !== void 0 ? option : value;
|
|
}
|
|
}
|
|
exports["default"] = Settings;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 883:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.createDirentFromStats = void 0;
|
|
class DirentFromStats {
|
|
constructor(name, stats) {
|
|
this.name = name;
|
|
this.isBlockDevice = stats.isBlockDevice.bind(stats);
|
|
this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
|
|
this.isDirectory = stats.isDirectory.bind(stats);
|
|
this.isFIFO = stats.isFIFO.bind(stats);
|
|
this.isFile = stats.isFile.bind(stats);
|
|
this.isSocket = stats.isSocket.bind(stats);
|
|
this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
|
|
}
|
|
}
|
|
function createDirentFromStats(name, stats) {
|
|
return new DirentFromStats(name, stats);
|
|
}
|
|
exports.createDirentFromStats = createDirentFromStats;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6297:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.fs = void 0;
|
|
const fs = __nccwpck_require__(883);
|
|
exports.fs = fs;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2987:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
|
|
const fs = __nccwpck_require__(7147);
|
|
exports.FILE_SYSTEM_ADAPTER = {
|
|
lstat: fs.lstat,
|
|
stat: fs.stat,
|
|
lstatSync: fs.lstatSync,
|
|
statSync: fs.statSync
|
|
};
|
|
function createFileSystemAdapter(fsMethods) {
|
|
if (fsMethods === undefined) {
|
|
return exports.FILE_SYSTEM_ADAPTER;
|
|
}
|
|
return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
|
|
}
|
|
exports.createFileSystemAdapter = createFileSystemAdapter;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 109:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.statSync = exports.stat = exports.Settings = void 0;
|
|
const async = __nccwpck_require__(4147);
|
|
const sync = __nccwpck_require__(4527);
|
|
const settings_1 = __nccwpck_require__(2410);
|
|
exports.Settings = settings_1.default;
|
|
function stat(path, optionsOrSettingsOrCallback, callback) {
|
|
if (typeof optionsOrSettingsOrCallback === 'function') {
|
|
async.read(path, getSettings(), optionsOrSettingsOrCallback);
|
|
return;
|
|
}
|
|
async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
|
|
}
|
|
exports.stat = stat;
|
|
function statSync(path, optionsOrSettings) {
|
|
const settings = getSettings(optionsOrSettings);
|
|
return sync.read(path, settings);
|
|
}
|
|
exports.statSync = statSync;
|
|
function getSettings(settingsOrOptions = {}) {
|
|
if (settingsOrOptions instanceof settings_1.default) {
|
|
return settingsOrOptions;
|
|
}
|
|
return new settings_1.default(settingsOrOptions);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4147:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.read = void 0;
|
|
function read(path, settings, callback) {
|
|
settings.fs.lstat(path, (lstatError, lstat) => {
|
|
if (lstatError !== null) {
|
|
callFailureCallback(callback, lstatError);
|
|
return;
|
|
}
|
|
if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
|
|
callSuccessCallback(callback, lstat);
|
|
return;
|
|
}
|
|
settings.fs.stat(path, (statError, stat) => {
|
|
if (statError !== null) {
|
|
if (settings.throwErrorOnBrokenSymbolicLink) {
|
|
callFailureCallback(callback, statError);
|
|
return;
|
|
}
|
|
callSuccessCallback(callback, lstat);
|
|
return;
|
|
}
|
|
if (settings.markSymbolicLink) {
|
|
stat.isSymbolicLink = () => true;
|
|
}
|
|
callSuccessCallback(callback, stat);
|
|
});
|
|
});
|
|
}
|
|
exports.read = read;
|
|
function callFailureCallback(callback, error) {
|
|
callback(error);
|
|
}
|
|
function callSuccessCallback(callback, result) {
|
|
callback(null, result);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4527:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.read = void 0;
|
|
function read(path, settings) {
|
|
const lstat = settings.fs.lstatSync(path);
|
|
if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
|
|
return lstat;
|
|
}
|
|
try {
|
|
const stat = settings.fs.statSync(path);
|
|
if (settings.markSymbolicLink) {
|
|
stat.isSymbolicLink = () => true;
|
|
}
|
|
return stat;
|
|
}
|
|
catch (error) {
|
|
if (!settings.throwErrorOnBrokenSymbolicLink) {
|
|
return lstat;
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
exports.read = read;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2410:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const fs = __nccwpck_require__(2987);
|
|
class Settings {
|
|
constructor(_options = {}) {
|
|
this._options = _options;
|
|
this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
|
|
this.fs = fs.createFileSystemAdapter(this._options.fs);
|
|
this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
|
|
this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
|
|
}
|
|
_getValue(option, value) {
|
|
return option !== null && option !== void 0 ? option : value;
|
|
}
|
|
}
|
|
exports["default"] = Settings;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6026:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;
|
|
const async_1 = __nccwpck_require__(7523);
|
|
const stream_1 = __nccwpck_require__(6737);
|
|
const sync_1 = __nccwpck_require__(3068);
|
|
const settings_1 = __nccwpck_require__(141);
|
|
exports.Settings = settings_1.default;
|
|
function walk(directory, optionsOrSettingsOrCallback, callback) {
|
|
if (typeof optionsOrSettingsOrCallback === 'function') {
|
|
new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
|
|
return;
|
|
}
|
|
new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
|
|
}
|
|
exports.walk = walk;
|
|
function walkSync(directory, optionsOrSettings) {
|
|
const settings = getSettings(optionsOrSettings);
|
|
const provider = new sync_1.default(directory, settings);
|
|
return provider.read();
|
|
}
|
|
exports.walkSync = walkSync;
|
|
function walkStream(directory, optionsOrSettings) {
|
|
const settings = getSettings(optionsOrSettings);
|
|
const provider = new stream_1.default(directory, settings);
|
|
return provider.read();
|
|
}
|
|
exports.walkStream = walkStream;
|
|
function getSettings(settingsOrOptions = {}) {
|
|
if (settingsOrOptions instanceof settings_1.default) {
|
|
return settingsOrOptions;
|
|
}
|
|
return new settings_1.default(settingsOrOptions);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7523:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const async_1 = __nccwpck_require__(5732);
|
|
class AsyncProvider {
|
|
constructor(_root, _settings) {
|
|
this._root = _root;
|
|
this._settings = _settings;
|
|
this._reader = new async_1.default(this._root, this._settings);
|
|
this._storage = [];
|
|
}
|
|
read(callback) {
|
|
this._reader.onError((error) => {
|
|
callFailureCallback(callback, error);
|
|
});
|
|
this._reader.onEntry((entry) => {
|
|
this._storage.push(entry);
|
|
});
|
|
this._reader.onEnd(() => {
|
|
callSuccessCallback(callback, this._storage);
|
|
});
|
|
this._reader.read();
|
|
}
|
|
}
|
|
exports["default"] = AsyncProvider;
|
|
function callFailureCallback(callback, error) {
|
|
callback(error);
|
|
}
|
|
function callSuccessCallback(callback, entries) {
|
|
callback(null, entries);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6737:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const stream_1 = __nccwpck_require__(2781);
|
|
const async_1 = __nccwpck_require__(5732);
|
|
class StreamProvider {
|
|
constructor(_root, _settings) {
|
|
this._root = _root;
|
|
this._settings = _settings;
|
|
this._reader = new async_1.default(this._root, this._settings);
|
|
this._stream = new stream_1.Readable({
|
|
objectMode: true,
|
|
read: () => { },
|
|
destroy: () => {
|
|
if (!this._reader.isDestroyed) {
|
|
this._reader.destroy();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
read() {
|
|
this._reader.onError((error) => {
|
|
this._stream.emit('error', error);
|
|
});
|
|
this._reader.onEntry((entry) => {
|
|
this._stream.push(entry);
|
|
});
|
|
this._reader.onEnd(() => {
|
|
this._stream.push(null);
|
|
});
|
|
this._reader.read();
|
|
return this._stream;
|
|
}
|
|
}
|
|
exports["default"] = StreamProvider;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3068:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const sync_1 = __nccwpck_require__(3595);
|
|
class SyncProvider {
|
|
constructor(_root, _settings) {
|
|
this._root = _root;
|
|
this._settings = _settings;
|
|
this._reader = new sync_1.default(this._root, this._settings);
|
|
}
|
|
read() {
|
|
return this._reader.read();
|
|
}
|
|
}
|
|
exports["default"] = SyncProvider;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5732:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const events_1 = __nccwpck_require__(2361);
|
|
const fsScandir = __nccwpck_require__(5667);
|
|
const fastq = __nccwpck_require__(7340);
|
|
const common = __nccwpck_require__(7988);
|
|
const reader_1 = __nccwpck_require__(8311);
|
|
class AsyncReader extends reader_1.default {
|
|
constructor(_root, _settings) {
|
|
super(_root, _settings);
|
|
this._settings = _settings;
|
|
this._scandir = fsScandir.scandir;
|
|
this._emitter = new events_1.EventEmitter();
|
|
this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
|
|
this._isFatalError = false;
|
|
this._isDestroyed = false;
|
|
this._queue.drain = () => {
|
|
if (!this._isFatalError) {
|
|
this._emitter.emit('end');
|
|
}
|
|
};
|
|
}
|
|
read() {
|
|
this._isFatalError = false;
|
|
this._isDestroyed = false;
|
|
setImmediate(() => {
|
|
this._pushToQueue(this._root, this._settings.basePath);
|
|
});
|
|
return this._emitter;
|
|
}
|
|
get isDestroyed() {
|
|
return this._isDestroyed;
|
|
}
|
|
destroy() {
|
|
if (this._isDestroyed) {
|
|
throw new Error('The reader is already destroyed');
|
|
}
|
|
this._isDestroyed = true;
|
|
this._queue.killAndDrain();
|
|
}
|
|
onEntry(callback) {
|
|
this._emitter.on('entry', callback);
|
|
}
|
|
onError(callback) {
|
|
this._emitter.once('error', callback);
|
|
}
|
|
onEnd(callback) {
|
|
this._emitter.once('end', callback);
|
|
}
|
|
_pushToQueue(directory, base) {
|
|
const queueItem = { directory, base };
|
|
this._queue.push(queueItem, (error) => {
|
|
if (error !== null) {
|
|
this._handleError(error);
|
|
}
|
|
});
|
|
}
|
|
_worker(item, done) {
|
|
this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
|
|
if (error !== null) {
|
|
done(error, undefined);
|
|
return;
|
|
}
|
|
for (const entry of entries) {
|
|
this._handleEntry(entry, item.base);
|
|
}
|
|
done(null, undefined);
|
|
});
|
|
}
|
|
_handleError(error) {
|
|
if (this._isDestroyed || !common.isFatalError(this._settings, error)) {
|
|
return;
|
|
}
|
|
this._isFatalError = true;
|
|
this._isDestroyed = true;
|
|
this._emitter.emit('error', error);
|
|
}
|
|
_handleEntry(entry, base) {
|
|
if (this._isDestroyed || this._isFatalError) {
|
|
return;
|
|
}
|
|
const fullpath = entry.path;
|
|
if (base !== undefined) {
|
|
entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
|
|
}
|
|
if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
|
|
this._emitEntry(entry);
|
|
}
|
|
if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
|
|
this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);
|
|
}
|
|
}
|
|
_emitEntry(entry) {
|
|
this._emitter.emit('entry', entry);
|
|
}
|
|
}
|
|
exports["default"] = AsyncReader;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7988:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;
|
|
function isFatalError(settings, error) {
|
|
if (settings.errorFilter === null) {
|
|
return true;
|
|
}
|
|
return !settings.errorFilter(error);
|
|
}
|
|
exports.isFatalError = isFatalError;
|
|
function isAppliedFilter(filter, value) {
|
|
return filter === null || filter(value);
|
|
}
|
|
exports.isAppliedFilter = isAppliedFilter;
|
|
function replacePathSegmentSeparator(filepath, separator) {
|
|
return filepath.split(/[/\\]/).join(separator);
|
|
}
|
|
exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
|
|
function joinPathSegments(a, b, separator) {
|
|
if (a === '') {
|
|
return b;
|
|
}
|
|
/**
|
|
* The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).
|
|
*/
|
|
if (a.endsWith(separator)) {
|
|
return a + b;
|
|
}
|
|
return a + separator + b;
|
|
}
|
|
exports.joinPathSegments = joinPathSegments;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8311:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const common = __nccwpck_require__(7988);
|
|
class Reader {
|
|
constructor(_root, _settings) {
|
|
this._root = _root;
|
|
this._settings = _settings;
|
|
this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
|
|
}
|
|
}
|
|
exports["default"] = Reader;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3595:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const fsScandir = __nccwpck_require__(5667);
|
|
const common = __nccwpck_require__(7988);
|
|
const reader_1 = __nccwpck_require__(8311);
|
|
class SyncReader extends reader_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._scandir = fsScandir.scandirSync;
|
|
this._storage = [];
|
|
this._queue = new Set();
|
|
}
|
|
read() {
|
|
this._pushToQueue(this._root, this._settings.basePath);
|
|
this._handleQueue();
|
|
return this._storage;
|
|
}
|
|
_pushToQueue(directory, base) {
|
|
this._queue.add({ directory, base });
|
|
}
|
|
_handleQueue() {
|
|
for (const item of this._queue.values()) {
|
|
this._handleDirectory(item.directory, item.base);
|
|
}
|
|
}
|
|
_handleDirectory(directory, base) {
|
|
try {
|
|
const entries = this._scandir(directory, this._settings.fsScandirSettings);
|
|
for (const entry of entries) {
|
|
this._handleEntry(entry, base);
|
|
}
|
|
}
|
|
catch (error) {
|
|
this._handleError(error);
|
|
}
|
|
}
|
|
_handleError(error) {
|
|
if (!common.isFatalError(this._settings, error)) {
|
|
return;
|
|
}
|
|
throw error;
|
|
}
|
|
_handleEntry(entry, base) {
|
|
const fullpath = entry.path;
|
|
if (base !== undefined) {
|
|
entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
|
|
}
|
|
if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
|
|
this._pushToStorage(entry);
|
|
}
|
|
if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
|
|
this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);
|
|
}
|
|
}
|
|
_pushToStorage(entry) {
|
|
this._storage.push(entry);
|
|
}
|
|
}
|
|
exports["default"] = SyncReader;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 141:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const path = __nccwpck_require__(1017);
|
|
const fsScandir = __nccwpck_require__(5667);
|
|
class Settings {
|
|
constructor(_options = {}) {
|
|
this._options = _options;
|
|
this.basePath = this._getValue(this._options.basePath, undefined);
|
|
this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);
|
|
this.deepFilter = this._getValue(this._options.deepFilter, null);
|
|
this.entryFilter = this._getValue(this._options.entryFilter, null);
|
|
this.errorFilter = this._getValue(this._options.errorFilter, null);
|
|
this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
|
|
this.fsScandirSettings = new fsScandir.Settings({
|
|
followSymbolicLinks: this._options.followSymbolicLinks,
|
|
fs: this._options.fs,
|
|
pathSegmentSeparator: this._options.pathSegmentSeparator,
|
|
stats: this._options.stats,
|
|
throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
|
|
});
|
|
}
|
|
_getValue(option, value) {
|
|
return option !== null && option !== void 0 ? option : value;
|
|
}
|
|
}
|
|
exports["default"] = Settings;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 334:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
const REGEX_IS_INSTALLATION_LEGACY = /^v1\./;
|
|
const REGEX_IS_INSTALLATION = /^ghs_/;
|
|
const REGEX_IS_USER_TO_SERVER = /^ghu_/;
|
|
async function auth(token) {
|
|
const isApp = token.split(/\./).length === 3;
|
|
const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);
|
|
const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);
|
|
const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth";
|
|
return {
|
|
type: "token",
|
|
token: token,
|
|
tokenType
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Prefix token for usage in the Authorization header
|
|
*
|
|
* @param token OAuth token or JSON Web Token
|
|
*/
|
|
function withAuthorizationPrefix(token) {
|
|
if (token.split(/\./).length === 3) {
|
|
return `bearer ${token}`;
|
|
}
|
|
|
|
return `token ${token}`;
|
|
}
|
|
|
|
async function hook(token, request, route, parameters) {
|
|
const endpoint = request.endpoint.merge(route, parameters);
|
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
|
return request(endpoint);
|
|
}
|
|
|
|
const createTokenAuth = function createTokenAuth(token) {
|
|
if (!token) {
|
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
|
}
|
|
|
|
if (typeof token !== "string") {
|
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
|
}
|
|
|
|
token = token.replace(/^(token|bearer) +/i, "");
|
|
return Object.assign(auth.bind(null, token), {
|
|
hook: hook.bind(null, token)
|
|
});
|
|
};
|
|
|
|
exports.createTokenAuth = createTokenAuth;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6762:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
var universalUserAgent = __nccwpck_require__(5030);
|
|
var beforeAfterHook = __nccwpck_require__(3682);
|
|
var request = __nccwpck_require__(6234);
|
|
var graphql = __nccwpck_require__(8467);
|
|
var authToken = __nccwpck_require__(334);
|
|
|
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = {};
|
|
var sourceKeys = Object.keys(source);
|
|
var key, i;
|
|
|
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
key = sourceKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
target[key] = source[key];
|
|
}
|
|
|
|
return target;
|
|
}
|
|
|
|
function _objectWithoutProperties(source, excluded) {
|
|
if (source == null) return {};
|
|
|
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
|
|
var key, i;
|
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
|
|
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];
|
|
}
|
|
}
|
|
|
|
return target;
|
|
}
|
|
|
|
const VERSION = "3.6.0";
|
|
|
|
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
|
|
|
|
requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" ");
|
|
|
|
if (options.baseUrl) {
|
|
requestDefaults.baseUrl = options.baseUrl;
|
|
}
|
|
|
|
if (options.previews) {
|
|
requestDefaults.mediaType.previews = options.previews;
|
|
}
|
|
|
|
if (options.timeZone) {
|
|
requestDefaults.headers["time-zone"] = options.timeZone;
|
|
}
|
|
|
|
this.request = request.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 ¯\_(ツ)_/¯
|
|
|
|
hook.wrap("request", auth.hook);
|
|
this.auth = auth;
|
|
}
|
|
} else {
|
|
const {
|
|
authStrategy
|
|
} = options,
|
|
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));
|
|
});
|
|
}
|
|
|
|
static defaults(defaults) {
|
|
const OctokitWithDefaults = class extends this {
|
|
constructor(...args) {
|
|
const options = args[0] || {};
|
|
|
|
if (typeof defaults === "function") {
|
|
super(defaults(options));
|
|
return;
|
|
}
|
|
|
|
super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {
|
|
userAgent: `${options.userAgent} ${defaults.userAgent}`
|
|
} : null));
|
|
}
|
|
|
|
};
|
|
return OctokitWithDefaults;
|
|
}
|
|
/**
|
|
* Attach a plugin (or many) to your Octokit instance.
|
|
*
|
|
* @example
|
|
* const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
|
|
*/
|
|
|
|
|
|
static plugin(...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;
|
|
}
|
|
|
|
}
|
|
Octokit.VERSION = VERSION;
|
|
Octokit.plugins = [];
|
|
|
|
exports.Octokit = Octokit;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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.12";
|
|
|
|
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.8.0";
|
|
|
|
function _buildMessageForResponseErrors(data) {
|
|
return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n");
|
|
}
|
|
|
|
class GraphqlResponseError extends Error {
|
|
constructor(request, headers, response) {
|
|
super(_buildMessageForResponseErrors(response));
|
|
this.request = request;
|
|
this.headers = headers;
|
|
this.response = response;
|
|
this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties.
|
|
|
|
this.errors = response.errors;
|
|
this.data = response.data; // 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 FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
|
|
const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
|
|
function graphql(request, query, options) {
|
|
if (options) {
|
|
if (typeof query === "string" && "query" in options) {
|
|
return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
|
|
}
|
|
|
|
for (const key in options) {
|
|
if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;
|
|
return Promise.reject(new Error(`[@octokit/graphql] "${key}" 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 GraphqlResponseError(requestOptions, headers, 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.GraphqlResponseError = GraphqlResponseError;
|
|
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.21.3";
|
|
|
|
function ownKeys(object, enumerableOnly) {
|
|
var keys = Object.keys(object);
|
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
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 = null != arguments[i] ? arguments[i] : {};
|
|
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
_defineProperty(target, key, source[key]);
|
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : 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;
|
|
}
|
|
|
|
/**
|
|
* 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) {
|
|
// endpoints can respond with 204 if repository is empty
|
|
if (!response.data) {
|
|
return _objectSpread2(_objectSpread2({}, response), {}, {
|
|
data: []
|
|
});
|
|
}
|
|
|
|
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
|
|
};
|
|
|
|
try {
|
|
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
|
|
};
|
|
} catch (error) {
|
|
if (error.status !== 409) throw error;
|
|
url = "";
|
|
return {
|
|
value: {
|
|
status: 200,
|
|
headers: {},
|
|
data: []
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
})
|
|
};
|
|
}
|
|
|
|
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/hook/deliveries", "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}/audit-log", "GET /enterprises/{enterprise}/secret-scanning/alerts", "GET /enterprises/{enterprise}/settings/billing/advanced-security", "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 /licenses", "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/cache/usage-by-repository", "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/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/audit-log", "GET /orgs/{org}/blocks", "GET /orgs/{org}/code-scanning/alerts", "GET /orgs/{org}/codespaces", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/dependabot/secrets", "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", "GET /orgs/{org}/events", "GET /orgs/{org}/external-groups", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "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}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/settings/billing/advanced-security", "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}/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/caches", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "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}/codespaces", "GET /repos/{owner}/{repo}/codespaces/devcontainers", "GET /repos/{owner}/{repo}/codespaces/secrets", "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}/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}/commits/{ref}/status", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/dependabot/secrets", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/environments", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repos/{owner}/{repo}/topics", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/codespaces", "GET /user/codespaces/secrets", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/packages/{package_type}/{package_name}/versions", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"];
|
|
|
|
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: {
|
|
addCustomLabelsToSelfHostedRunnerForOrg: ["POST /orgs/{org}/actions/runners/{runner_id}/labels"],
|
|
addCustomLabelsToSelfHostedRunnerForRepo: ["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
|
|
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"],
|
|
deleteActionsCacheById: ["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],
|
|
deleteActionsCacheByKey: ["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],
|
|
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"],
|
|
downloadWorkflowRunAttemptLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/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"],
|
|
getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"],
|
|
getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"],
|
|
getActionsCacheUsageByRepoForOrg: ["GET /orgs/{org}/actions/cache/usage-by-repository"],
|
|
getActionsCacheUsageForEnterprise: ["GET /enterprises/{enterprise}/actions/cache/usage"],
|
|
getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"],
|
|
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}"],
|
|
getGithubActionsDefaultWorkflowPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/workflow"],
|
|
getGithubActionsDefaultWorkflowPermissionsOrganization: ["GET /orgs/{org}/actions/permissions/workflow"],
|
|
getGithubActionsDefaultWorkflowPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/workflow"],
|
|
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}"],
|
|
getWorkflowAccessToRepository: ["GET /repos/{owner}/{repo}/actions/permissions/access"],
|
|
getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
|
|
getWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],
|
|
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"],
|
|
listJobsForWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],
|
|
listLabelsForSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}/labels"],
|
|
listLabelsForSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
|
|
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"],
|
|
reRunJobForWorkflowRun: ["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],
|
|
reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
|
|
reRunWorkflowFailedJobs: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],
|
|
removeAllCustomLabelsFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],
|
|
removeAllCustomLabelsFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
|
|
removeCustomLabelFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],
|
|
removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],
|
|
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"],
|
|
setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],
|
|
setCustomLabelsForSelfHostedRunnerForRepo: ["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],
|
|
setGithubActionsDefaultWorkflowPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/workflow"],
|
|
setGithubActionsDefaultWorkflowPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions/workflow"],
|
|
setGithubActionsDefaultWorkflowPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],
|
|
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"],
|
|
setWorkflowAccessToRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/access"]
|
|
},
|
|
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}", {}, {
|
|
renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"]
|
|
}],
|
|
addRepoToInstallationForAuthenticatedUser: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"],
|
|
checkToken: ["POST /applications/{client_id}/token"],
|
|
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"],
|
|
getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"],
|
|
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"],
|
|
listWebhookDeliveries: ["GET /app/hook/deliveries"],
|
|
redeliverWebhookDelivery: ["POST /app/hook/deliveries/{delivery_id}/attempts"],
|
|
removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}", {}, {
|
|
renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"]
|
|
}],
|
|
removeRepoFromInstallationForAuthenticatedUser: ["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"],
|
|
getGithubAdvancedSecurityBillingGhe: ["GET /enterprises/{enterprise}/settings/billing/advanced-security"],
|
|
getGithubAdvancedSecurityBillingOrg: ["GET /orgs/{org}/settings/billing/advanced-security"],
|
|
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"],
|
|
rerequestRun: ["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],
|
|
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"],
|
|
listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"],
|
|
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"],
|
|
getConductCode: ["GET /codes_of_conduct/{key}"]
|
|
},
|
|
codespaces: {
|
|
addRepositoryForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
|
|
codespaceMachinesForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/machines"],
|
|
createForAuthenticatedUser: ["POST /user/codespaces"],
|
|
createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
|
|
createOrUpdateSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}"],
|
|
createWithPrForAuthenticatedUser: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],
|
|
createWithRepoForAuthenticatedUser: ["POST /repos/{owner}/{repo}/codespaces"],
|
|
deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"],
|
|
deleteFromOrganization: ["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],
|
|
deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
|
|
deleteSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}"],
|
|
exportForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/exports"],
|
|
getExportDetailsForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/exports/{export_id}"],
|
|
getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"],
|
|
getPublicKeyForAuthenticatedUser: ["GET /user/codespaces/secrets/public-key"],
|
|
getRepoPublicKey: ["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],
|
|
getRepoSecret: ["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],
|
|
getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"],
|
|
listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"],
|
|
listForAuthenticatedUser: ["GET /user/codespaces"],
|
|
listInOrganization: ["GET /orgs/{org}/codespaces", {}, {
|
|
renamedParameters: {
|
|
org_id: "org"
|
|
}
|
|
}],
|
|
listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"],
|
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
|
|
listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"],
|
|
listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"],
|
|
removeRepositoryForSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],
|
|
repoMachinesForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/machines"],
|
|
setRepositoriesForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories"],
|
|
startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"],
|
|
stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"],
|
|
stopInOrganization: ["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],
|
|
updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"]
|
|
},
|
|
dependabot: {
|
|
addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],
|
|
createOrUpdateOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],
|
|
createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
|
|
deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],
|
|
deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
|
|
getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"],
|
|
getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"],
|
|
getRepoPublicKey: ["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],
|
|
getRepoSecret: ["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],
|
|
listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"],
|
|
listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"],
|
|
listSelectedReposForOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],
|
|
removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],
|
|
setSelectedReposForOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"]
|
|
},
|
|
dependencyGraph: {
|
|
createRepositorySnapshot: ["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],
|
|
diffRange: ["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"]
|
|
},
|
|
emojis: {
|
|
get: ["GET /emojis"]
|
|
},
|
|
enterpriseAdmin: {
|
|
addCustomLabelsToSelfHostedRunnerForEnterprise: ["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],
|
|
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"],
|
|
getServerStatistics: ["GET /enterprise-installation/{enterprise_or_org}/server-statistics"],
|
|
listLabelsForSelfHostedRunnerForEnterprise: ["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],
|
|
listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"],
|
|
removeAllCustomLabelsFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],
|
|
removeCustomLabelFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"],
|
|
setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],
|
|
setCustomLabelsForSelfHostedRunnerForEnterprise: ["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"],
|
|
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"],
|
|
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"],
|
|
deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive"],
|
|
downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive"],
|
|
getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive"],
|
|
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}"],
|
|
getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"],
|
|
listForAuthenticatedUser: ["GET /user/migrations"],
|
|
listForOrg: ["GET /orgs/{org}/migrations"],
|
|
listReposForAuthenticatedUser: ["GET /user/migrations/{migration_id}/repositories"],
|
|
listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"],
|
|
listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {}, {
|
|
renamed: ["migrations", "listReposForAuthenticatedUser"]
|
|
}],
|
|
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"],
|
|
unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"],
|
|
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"],
|
|
getWebhookDelivery: ["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],
|
|
list: ["GET /organizations"],
|
|
listAppInstallations: ["GET /orgs/{org}/installations"],
|
|
listBlockedUsers: ["GET /orgs/{org}/blocks"],
|
|
listCustomRoles: ["GET /organizations/{organization_id}/custom_roles"],
|
|
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"],
|
|
listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"],
|
|
listWebhooks: ["GET /orgs/{org}/hooks"],
|
|
pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
|
|
redeliverWebhookDelivery: ["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],
|
|
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}"],
|
|
deletePackageForUser: ["DELETE /users/{username}/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}"],
|
|
deletePackageVersionForUser: ["DELETE /users/{username}/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}"],
|
|
listPackagesForAuthenticatedUser: ["GET /user/packages"],
|
|
listPackagesForOrganization: ["GET /orgs/{org}/packages"],
|
|
listPackagesForUser: ["GET /users/{username}/packages"],
|
|
restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"],
|
|
restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],
|
|
restorePackageForUser: ["POST /users/{username}/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"],
|
|
restorePackageVersionForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]
|
|
},
|
|
projects: {
|
|
addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"],
|
|
createCard: ["POST /projects/columns/{column_id}/cards"],
|
|
createColumn: ["POST /projects/{project_id}/columns"],
|
|
createForAuthenticatedUser: ["POST /user/projects"],
|
|
createForOrg: ["POST /orgs/{org}/projects"],
|
|
createForRepo: ["POST /repos/{owner}/{repo}/projects"],
|
|
delete: ["DELETE /projects/{project_id}"],
|
|
deleteCard: ["DELETE /projects/columns/cards/{card_id}"],
|
|
deleteColumn: ["DELETE /projects/columns/{column_id}"],
|
|
get: ["GET /projects/{project_id}"],
|
|
getCard: ["GET /projects/columns/cards/{card_id}"],
|
|
getColumn: ["GET /projects/columns/{column_id}"],
|
|
getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission"],
|
|
listCards: ["GET /projects/columns/{column_id}/cards"],
|
|
listCollaborators: ["GET /projects/{project_id}/collaborators"],
|
|
listColumns: ["GET /projects/{project_id}/columns"],
|
|
listForOrg: ["GET /orgs/{org}/projects"],
|
|
listForRepo: ["GET /repos/{owner}/{repo}/projects"],
|
|
listForUser: ["GET /users/{username}/projects"],
|
|
moveCard: ["POST /projects/columns/cards/{card_id}/moves"],
|
|
moveColumn: ["POST /projects/columns/{column_id}/moves"],
|
|
removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}"],
|
|
update: ["PATCH /projects/{project_id}"],
|
|
updateCard: ["PATCH /projects/columns/cards/{card_id}"],
|
|
updateColumn: ["PATCH /projects/columns/{column_id}"]
|
|
},
|
|
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"],
|
|
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"],
|
|
createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
|
|
createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],
|
|
createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],
|
|
createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],
|
|
createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],
|
|
createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],
|
|
deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],
|
|
deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],
|
|
deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],
|
|
deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],
|
|
deleteForRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],
|
|
deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],
|
|
deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],
|
|
listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],
|
|
listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
|
|
listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],
|
|
listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],
|
|
listForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],
|
|
listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],
|
|
listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]
|
|
},
|
|
repos: {
|
|
acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}", {}, {
|
|
renamed: ["repos", "acceptInvitationForAuthenticatedUser"]
|
|
}],
|
|
acceptInvitationForAuthenticatedUser: ["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"],
|
|
codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"],
|
|
compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
|
|
compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"],
|
|
createAutolink: ["POST /repos/{owner}/{repo}/autolinks"],
|
|
createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
|
|
createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],
|
|
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"],
|
|
createRelease: ["POST /repos/{owner}/{repo}/releases"],
|
|
createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"],
|
|
createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate"],
|
|
createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
|
|
declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}", {}, {
|
|
renamed: ["repos", "declineInvitationForAuthenticatedUser"]
|
|
}],
|
|
declineInvitationForAuthenticatedUser: ["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}"],
|
|
deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],
|
|
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"],
|
|
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"],
|
|
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}"],
|
|
deleteTagProtection: ["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"],
|
|
deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
|
|
disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes"],
|
|
disableLfsForRepo: ["DELETE /repos/{owner}/{repo}/lfs"],
|
|
disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],
|
|
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"],
|
|
enableLfsForRepo: ["PUT /repos/{owner}/{repo}/lfs"],
|
|
enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts"],
|
|
generateReleaseNotes: ["POST /repos/{owner}/{repo}/releases/generate-notes"],
|
|
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"],
|
|
getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],
|
|
getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],
|
|
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"],
|
|
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"],
|
|
getWebhookDelivery: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],
|
|
listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"],
|
|
listBranches: ["GET /repos/{owner}/{repo}/branches"],
|
|
listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],
|
|
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"],
|
|
listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
|
|
listReleases: ["GET /repos/{owner}/{repo}/releases"],
|
|
listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"],
|
|
listTags: ["GET /repos/{owner}/{repo}/tags"],
|
|
listTeams: ["GET /repos/{owner}/{repo}/teams"],
|
|
listWebhookDeliveries: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],
|
|
listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
|
|
merge: ["POST /repos/{owner}/{repo}/merges"],
|
|
mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"],
|
|
pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
|
|
redeliverWebhookDelivery: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],
|
|
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"],
|
|
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"],
|
|
issuesAndPullRequests: ["GET /search/issues"],
|
|
labels: ["GET /search/labels"],
|
|
repos: ["GET /search/repositories"],
|
|
topics: ["GET /search/topics"],
|
|
users: ["GET /search/users"]
|
|
},
|
|
secretScanning: {
|
|
getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],
|
|
listAlertsForEnterprise: ["GET /enterprises/{enterprise}/secret-scanning/alerts"],
|
|
listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"],
|
|
listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
|
|
listLocationsForAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],
|
|
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}"],
|
|
addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
|
|
checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
|
|
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"],
|
|
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", {}, {
|
|
renamed: ["users", "addEmailForAuthenticatedUser"]
|
|
}],
|
|
addEmailForAuthenticatedUser: ["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", {}, {
|
|
renamed: ["users", "createGpgKeyForAuthenticatedUser"]
|
|
}],
|
|
createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"],
|
|
createPublicSshKeyForAuthenticated: ["POST /user/keys", {}, {
|
|
renamed: ["users", "createPublicSshKeyForAuthenticatedUser"]
|
|
}],
|
|
createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"],
|
|
deleteEmailForAuthenticated: ["DELETE /user/emails", {}, {
|
|
renamed: ["users", "deleteEmailForAuthenticatedUser"]
|
|
}],
|
|
deleteEmailForAuthenticatedUser: ["DELETE /user/emails"],
|
|
deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}", {}, {
|
|
renamed: ["users", "deleteGpgKeyForAuthenticatedUser"]
|
|
}],
|
|
deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"],
|
|
deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}", {}, {
|
|
renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"]
|
|
}],
|
|
deletePublicSshKeyForAuthenticatedUser: ["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}", {}, {
|
|
renamed: ["users", "getGpgKeyForAuthenticatedUser"]
|
|
}],
|
|
getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"],
|
|
getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}", {}, {
|
|
renamed: ["users", "getPublicSshKeyForAuthenticatedUser"]
|
|
}],
|
|
getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"],
|
|
list: ["GET /users"],
|
|
listBlockedByAuthenticated: ["GET /user/blocks", {}, {
|
|
renamed: ["users", "listBlockedByAuthenticatedUser"]
|
|
}],
|
|
listBlockedByAuthenticatedUser: ["GET /user/blocks"],
|
|
listEmailsForAuthenticated: ["GET /user/emails", {}, {
|
|
renamed: ["users", "listEmailsForAuthenticatedUser"]
|
|
}],
|
|
listEmailsForAuthenticatedUser: ["GET /user/emails"],
|
|
listFollowedByAuthenticated: ["GET /user/following", {}, {
|
|
renamed: ["users", "listFollowedByAuthenticatedUser"]
|
|
}],
|
|
listFollowedByAuthenticatedUser: ["GET /user/following"],
|
|
listFollowersForAuthenticatedUser: ["GET /user/followers"],
|
|
listFollowersForUser: ["GET /users/{username}/followers"],
|
|
listFollowingForUser: ["GET /users/{username}/following"],
|
|
listGpgKeysForAuthenticated: ["GET /user/gpg_keys", {}, {
|
|
renamed: ["users", "listGpgKeysForAuthenticatedUser"]
|
|
}],
|
|
listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"],
|
|
listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
|
|
listPublicEmailsForAuthenticated: ["GET /user/public_emails", {}, {
|
|
renamed: ["users", "listPublicEmailsForAuthenticatedUser"]
|
|
}],
|
|
listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"],
|
|
listPublicKeysForUser: ["GET /users/{username}/keys"],
|
|
listPublicSshKeysForAuthenticated: ["GET /user/keys", {}, {
|
|
renamed: ["users", "listPublicSshKeysForAuthenticatedUser"]
|
|
}],
|
|
listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"],
|
|
setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility", {}, {
|
|
renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"]
|
|
}],
|
|
setPrimaryEmailVisibilityForAuthenticatedUser: ["PATCH /user/email/visibility"],
|
|
unblock: ["DELETE /user/blocks/{username}"],
|
|
unfollow: ["DELETE /user/following/{username}"],
|
|
updateAuthenticated: ["PATCH /user"]
|
|
}
|
|
};
|
|
|
|
const VERSION = "5.16.2";
|
|
|
|
function endpointsToMethods(octokit, endpointsMap) {
|
|
const newMethods = {};
|
|
|
|
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] = {};
|
|
}
|
|
|
|
const scopeMethods = newMethods[scope];
|
|
|
|
if (decorations) {
|
|
scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);
|
|
continue;
|
|
}
|
|
|
|
scopeMethods[methodName] = octokit.request.defaults(endpointDefaults);
|
|
}
|
|
}
|
|
|
|
return newMethods;
|
|
}
|
|
|
|
function decorate(octokit, scope, methodName, defaults, decorations) {
|
|
const requestWithDefaults = octokit.request.defaults(defaults);
|
|
/* istanbul ignore next */
|
|
|
|
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`
|
|
|
|
if (decorations.mapToData) {
|
|
options = Object.assign({}, options, {
|
|
data: options[decorations.mapToData],
|
|
[decorations.mapToData]: undefined
|
|
});
|
|
return requestWithDefaults(options);
|
|
}
|
|
|
|
if (decorations.renamed) {
|
|
const [newScope, newMethodName] = decorations.renamed;
|
|
octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);
|
|
}
|
|
|
|
if (decorations.deprecated) {
|
|
octokit.log.warn(decorations.deprecated);
|
|
}
|
|
|
|
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];
|
|
}
|
|
}
|
|
|
|
return requestWithDefaults(options);
|
|
} // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
|
|
|
|
|
|
return requestWithDefaults(...args);
|
|
}
|
|
|
|
return Object.assign(withDecorations, requestWithDefaults);
|
|
}
|
|
|
|
function restEndpointMethods(octokit) {
|
|
const api = endpointsToMethods(octokit, Endpoints);
|
|
return {
|
|
rest: api
|
|
};
|
|
}
|
|
restEndpointMethods.VERSION = VERSION;
|
|
function legacyRestEndpointMethods(octokit) {
|
|
const api = endpointsToMethods(octokit, Endpoints);
|
|
return _objectSpread2(_objectSpread2({}, api), {}, {
|
|
rest: api
|
|
});
|
|
}
|
|
legacyRestEndpointMethods.VERSION = VERSION;
|
|
|
|
exports.legacyRestEndpointMethods = legacyRestEndpointMethods;
|
|
exports.restEndpointMethods = restEndpointMethods;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 537:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var deprecation = __nccwpck_require__(8932);
|
|
var once = _interopDefault(__nccwpck_require__(1223));
|
|
|
|
const logOnceCode = once(deprecation => console.warn(deprecation));
|
|
const logOnceHeaders = once(deprecation => console.warn(deprecation));
|
|
/**
|
|
* Error with extra properties to help with debugging
|
|
*/
|
|
|
|
class RequestError extends Error {
|
|
constructor(message, statusCode, options) {
|
|
super(message); // Maintains proper stack trace (only available on V8)
|
|
|
|
/* istanbul ignore next */
|
|
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
|
|
this.name = "HttpError";
|
|
this.status = statusCode;
|
|
let headers;
|
|
|
|
if ("headers" in options && typeof options.headers !== "undefined") {
|
|
headers = options.headers;
|
|
}
|
|
|
|
if ("response" in options) {
|
|
this.response = options.response;
|
|
headers = options.response.headers;
|
|
} // redact request credentials without mutating original request options
|
|
|
|
|
|
const requestCopy = Object.assign({}, options.request);
|
|
|
|
if (options.request.headers.authorization) {
|
|
requestCopy.headers = Object.assign({}, options.request.headers, {
|
|
authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
|
|
});
|
|
}
|
|
|
|
requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
|
|
// see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
|
|
.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
|
|
// see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
|
|
.replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
|
|
this.request = requestCopy; // deprecations
|
|
|
|
Object.defineProperty(this, "code", {
|
|
get() {
|
|
logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
|
|
return statusCode;
|
|
}
|
|
|
|
});
|
|
Object.defineProperty(this, "headers", {
|
|
get() {
|
|
logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));
|
|
return headers || {};
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
exports.RequestError = RequestError;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6234:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var endpoint = __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.6.3";
|
|
|
|
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);
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
|
return response.text();
|
|
}
|
|
|
|
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(", ")}`;
|
|
}
|
|
|
|
return data.message;
|
|
} // istanbul ignore next - just in case
|
|
|
|
|
|
return `Unknown error: ${JSON.stringify(data)}`;
|
|
}
|
|
|
|
function withDefaults(oldEndpoint, newDefaults) {
|
|
const endpoint = oldEndpoint.defaults(newDefaults);
|
|
|
|
const newApi = function (route, parameters) {
|
|
const endpointOptions = endpoint.merge(route, parameters);
|
|
|
|
if (!endpointOptions.request || !endpointOptions.request.hook) {
|
|
return fetchWrapper(endpoint.parse(endpointOptions));
|
|
}
|
|
|
|
const request = (route, parameters) => {
|
|
return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
|
|
};
|
|
|
|
Object.assign(request, {
|
|
endpoint,
|
|
defaults: withDefaults.bind(null, endpoint)
|
|
});
|
|
return endpointOptions.request.hook(request, endpointOptions);
|
|
};
|
|
|
|
return Object.assign(newApi, {
|
|
endpoint,
|
|
defaults: withDefaults.bind(null, endpoint)
|
|
});
|
|
}
|
|
|
|
const request = withDefaults(endpoint.endpoint, {
|
|
headers: {
|
|
"user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
|
|
}
|
|
});
|
|
|
|
exports.request = request;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6761:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
const Utils = __nccwpck_require__(5182);
|
|
const pth = __nccwpck_require__(1017);
|
|
const ZipEntry = __nccwpck_require__(4057);
|
|
const ZipFile = __nccwpck_require__(7744);
|
|
|
|
const get_Bool = (val, def) => (typeof val === "boolean" ? val : def);
|
|
const get_Str = (val, def) => (typeof val === "string" ? val : def);
|
|
|
|
const defaultOptions = {
|
|
// option "noSort" : if true it disables files sorting
|
|
noSort: false,
|
|
// read entries during load (initial loading may be slower)
|
|
readEntries: false,
|
|
// default method is none
|
|
method: Utils.Constants.NONE,
|
|
// file system
|
|
fs: null
|
|
};
|
|
|
|
module.exports = function (/**String*/ input, /** object */ options) {
|
|
let inBuffer = null;
|
|
|
|
// create object based default options, allowing them to be overwritten
|
|
const opts = Object.assign(Object.create(null), defaultOptions);
|
|
|
|
// test input variable
|
|
if (input && "object" === typeof input) {
|
|
// if value is not buffer we accept it to be object with options
|
|
if (!(input instanceof Uint8Array)) {
|
|
Object.assign(opts, input);
|
|
input = opts.input ? opts.input : undefined;
|
|
if (opts.input) delete opts.input;
|
|
}
|
|
|
|
// if input is buffer
|
|
if (Buffer.isBuffer(input)) {
|
|
inBuffer = input;
|
|
opts.method = Utils.Constants.BUFFER;
|
|
input = undefined;
|
|
}
|
|
}
|
|
|
|
// assign options
|
|
Object.assign(opts, options);
|
|
|
|
// instanciate utils filesystem
|
|
const filetools = new Utils(opts);
|
|
|
|
// if input is file name we retrieve its content
|
|
if (input && "string" === typeof input) {
|
|
// load zip file
|
|
if (filetools.fs.existsSync(input)) {
|
|
opts.method = Utils.Constants.FILE;
|
|
opts.filename = input;
|
|
inBuffer = filetools.fs.readFileSync(input);
|
|
} else {
|
|
throw new Error(Utils.Errors.INVALID_FILENAME);
|
|
}
|
|
}
|
|
|
|
// create variable
|
|
const _zip = new ZipFile(inBuffer, opts);
|
|
|
|
const { canonical, sanitize } = Utils;
|
|
|
|
function getEntry(/**Object*/ entry) {
|
|
if (entry && _zip) {
|
|
var item;
|
|
// If entry was given as a file name
|
|
if (typeof entry === "string") item = _zip.getEntry(entry);
|
|
// if entry was given as a ZipEntry object
|
|
if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
|
|
|
|
if (item) {
|
|
return item;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function fixPath(zipPath) {
|
|
const { join, normalize, sep } = pth.posix;
|
|
// convert windows file separators and normalize
|
|
return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
|
|
}
|
|
|
|
return {
|
|
/**
|
|
* Extracts the given entry from the archive and returns the content as a Buffer object
|
|
* @param entry ZipEntry object or String with the full path of the entry
|
|
*
|
|
* @return Buffer or Null in case of error
|
|
*/
|
|
readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {
|
|
var item = getEntry(entry);
|
|
return (item && item.getData(pass)) || null;
|
|
},
|
|
|
|
/**
|
|
* Asynchronous readFile
|
|
* @param entry ZipEntry object or String with the full path of the entry
|
|
* @param callback
|
|
*
|
|
* @return Buffer or Null in case of error
|
|
*/
|
|
readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
item.getDataAsync(callback);
|
|
} else {
|
|
callback(null, "getEntry failed for:" + entry);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Extracts the given entry from the archive and returns the content as plain text in the given encoding
|
|
* @param entry ZipEntry object or String with the full path of the entry
|
|
* @param encoding Optional. If no encoding is specified utf8 is used
|
|
*
|
|
* @return String
|
|
*/
|
|
readAsText: function (/**Object*/ entry, /**String=*/ encoding) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
var data = item.getData();
|
|
if (data && data.length) {
|
|
return data.toString(encoding || "utf8");
|
|
}
|
|
}
|
|
return "";
|
|
},
|
|
|
|
/**
|
|
* Asynchronous readAsText
|
|
* @param entry ZipEntry object or String with the full path of the entry
|
|
* @param callback
|
|
* @param encoding Optional. If no encoding is specified utf8 is used
|
|
*
|
|
* @return String
|
|
*/
|
|
readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
item.getDataAsync(function (data, err) {
|
|
if (err) {
|
|
callback(data, err);
|
|
return;
|
|
}
|
|
|
|
if (data && data.length) {
|
|
callback(data.toString(encoding || "utf8"));
|
|
} else {
|
|
callback("");
|
|
}
|
|
});
|
|
} else {
|
|
callback("");
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
|
|
*
|
|
* @param entry
|
|
*/
|
|
deleteFile: function (/**Object*/ entry) {
|
|
// @TODO: test deleteFile
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
_zip.deleteEntry(item.entryName);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Adds a comment to the zip. The zip must be rewritten after adding the comment.
|
|
*
|
|
* @param comment
|
|
*/
|
|
addZipComment: function (/**String*/ comment) {
|
|
// @TODO: test addZipComment
|
|
_zip.comment = comment;
|
|
},
|
|
|
|
/**
|
|
* Returns the zip comment
|
|
*
|
|
* @return String
|
|
*/
|
|
getZipComment: function () {
|
|
return _zip.comment || "";
|
|
},
|
|
|
|
/**
|
|
* Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
|
|
* The comment cannot exceed 65535 characters in length
|
|
*
|
|
* @param entry
|
|
* @param comment
|
|
*/
|
|
addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
item.comment = comment;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Returns the comment of the specified entry
|
|
*
|
|
* @param entry
|
|
* @return String
|
|
*/
|
|
getZipEntryComment: function (/**Object*/ entry) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
return item.comment || "";
|
|
}
|
|
return "";
|
|
},
|
|
|
|
/**
|
|
* Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
|
|
*
|
|
* @param entry
|
|
* @param content
|
|
*/
|
|
updateFile: function (/**Object*/ entry, /**Buffer*/ content) {
|
|
var item = getEntry(entry);
|
|
if (item) {
|
|
item.setData(content);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Adds a file from the disk to the archive
|
|
*
|
|
* @param localPath File to add to zip
|
|
* @param zipPath Optional path inside the zip
|
|
* @param zipName Optional name for the file
|
|
*/
|
|
addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {
|
|
if (filetools.fs.existsSync(localPath)) {
|
|
// fix ZipPath
|
|
zipPath = zipPath ? fixPath(zipPath) : "";
|
|
|
|
// p - local file name
|
|
var p = localPath.split("\\").join("/").split("/").pop();
|
|
|
|
// add file name into zippath
|
|
zipPath += zipName ? zipName : p;
|
|
|
|
// read file attributes
|
|
const _attr = filetools.fs.statSync(localPath);
|
|
|
|
// add file into zip file
|
|
this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);
|
|
} else {
|
|
throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Adds a local directory and all its nested files and directories to the archive
|
|
*
|
|
* @param localPath
|
|
* @param zipPath optional path inside zip
|
|
* @param filter optional RegExp or Function if files match will
|
|
* be included.
|
|
*/
|
|
addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter) {
|
|
// Prepare filter
|
|
if (filter instanceof RegExp) {
|
|
// if filter is RegExp wrap it
|
|
filter = (function (rx) {
|
|
return function (filename) {
|
|
return rx.test(filename);
|
|
};
|
|
})(filter);
|
|
} else if ("function" !== typeof filter) {
|
|
// if filter is not function we will replace it
|
|
filter = function () {
|
|
return true;
|
|
};
|
|
}
|
|
|
|
// fix ZipPath
|
|
zipPath = zipPath ? fixPath(zipPath) : "";
|
|
|
|
// normalize the path first
|
|
localPath = pth.normalize(localPath);
|
|
|
|
if (filetools.fs.existsSync(localPath)) {
|
|
const items = filetools.findFiles(localPath);
|
|
const self = this;
|
|
|
|
if (items.length) {
|
|
items.forEach(function (filepath) {
|
|
var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
|
|
if (filter(p)) {
|
|
var stats = filetools.fs.statSync(filepath);
|
|
if (stats.isFile()) {
|
|
self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", stats);
|
|
} else {
|
|
self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Asynchronous addLocalFile
|
|
* @param localPath
|
|
* @param callback
|
|
* @param zipPath optional path inside zip
|
|
* @param filter optional RegExp or Function if files match will
|
|
* be included.
|
|
*/
|
|
addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {
|
|
if (filter instanceof RegExp) {
|
|
filter = (function (rx) {
|
|
return function (filename) {
|
|
return rx.test(filename);
|
|
};
|
|
})(filter);
|
|
} else if ("function" !== typeof filter) {
|
|
filter = function () {
|
|
return true;
|
|
};
|
|
}
|
|
|
|
// fix ZipPath
|
|
zipPath = zipPath ? fixPath(zipPath) : "";
|
|
|
|
// normalize the path first
|
|
localPath = pth.normalize(localPath);
|
|
|
|
var self = this;
|
|
filetools.fs.open(localPath, "r", function (err) {
|
|
if (err && err.code === "ENOENT") {
|
|
callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
|
|
} else if (err) {
|
|
callback(undefined, err);
|
|
} else {
|
|
var items = filetools.findFiles(localPath);
|
|
var i = -1;
|
|
|
|
var next = function () {
|
|
i += 1;
|
|
if (i < items.length) {
|
|
var filepath = items[i];
|
|
var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
|
|
p = p
|
|
.normalize("NFD")
|
|
.replace(/[\u0300-\u036f]/g, "")
|
|
.replace(/[^\x20-\x7E]/g, ""); // accent fix
|
|
if (filter(p)) {
|
|
filetools.fs.stat(filepath, function (er0, stats) {
|
|
if (er0) callback(undefined, er0);
|
|
if (stats.isFile()) {
|
|
filetools.fs.readFile(filepath, function (er1, data) {
|
|
if (er1) {
|
|
callback(undefined, er1);
|
|
} else {
|
|
self.addFile(zipPath + p, data, "", stats);
|
|
next();
|
|
}
|
|
});
|
|
} else {
|
|
self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
|
|
next();
|
|
}
|
|
});
|
|
} else {
|
|
next();
|
|
}
|
|
} else {
|
|
callback(true, undefined);
|
|
}
|
|
};
|
|
|
|
next();
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @param {string} localPath - path where files will be extracted
|
|
* @param {object} props - optional properties
|
|
* @param {string} props.zipPath - optional path inside zip
|
|
* @param {regexp, function} props.filter - RegExp or Function if files match will be included.
|
|
*/
|
|
addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {
|
|
return new Promise((resolve, reject) => {
|
|
const { filter, zipPath } = Object.assign({}, props);
|
|
this.addLocalFolderAsync(
|
|
localPath,
|
|
(done, err) => {
|
|
if (err) reject(err);
|
|
if (done) resolve(this);
|
|
},
|
|
zipPath,
|
|
filter
|
|
);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Allows you to create a entry (file or directory) in the zip file.
|
|
* If you want to create a directory the entryName must end in / and a null buffer should be provided.
|
|
* Comment and attributes are optional
|
|
*
|
|
* @param {string} entryName
|
|
* @param {Buffer | string} content - file content as buffer or utf8 coded string
|
|
* @param {string} comment - file comment
|
|
* @param {number | object} attr - number as unix file permissions, object as filesystem Stats object
|
|
*/
|
|
addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {
|
|
let entry = getEntry(entryName);
|
|
const update = entry != null;
|
|
|
|
// prepare new entry
|
|
if (!update) {
|
|
entry = new ZipEntry();
|
|
entry.entryName = entryName;
|
|
}
|
|
entry.comment = comment || "";
|
|
|
|
const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats;
|
|
|
|
// last modification time from file stats
|
|
if (isStat) {
|
|
entry.header.time = attr.mtime;
|
|
}
|
|
|
|
// Set file attribute
|
|
var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)
|
|
|
|
// extended attributes field for Unix
|
|
if (!Utils.isWin) {
|
|
// set file type either S_IFDIR / S_IFREG
|
|
let unix = entry.isDirectory ? 0x4000 : 0x8000;
|
|
|
|
if (isStat) {
|
|
// File attributes from file stats
|
|
unix |= 0xfff & attr.mode;
|
|
} else if ("number" === typeof attr) {
|
|
// attr from given attr values
|
|
unix |= 0xfff & attr;
|
|
} else {
|
|
// Default values:
|
|
unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)
|
|
}
|
|
|
|
fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes
|
|
}
|
|
|
|
entry.attr = fileattr;
|
|
|
|
entry.setData(content);
|
|
if (!update) _zip.setEntry(entry);
|
|
},
|
|
|
|
/**
|
|
* Returns an array of ZipEntry objects representing the files and folders inside the archive
|
|
*
|
|
* @return Array
|
|
*/
|
|
getEntries: function () {
|
|
return _zip ? _zip.entries : [];
|
|
},
|
|
|
|
/**
|
|
* Returns a ZipEntry object representing the file or folder specified by ``name``.
|
|
*
|
|
* @param name
|
|
* @return ZipEntry
|
|
*/
|
|
getEntry: function (/**String*/ name) {
|
|
return getEntry(name);
|
|
},
|
|
|
|
getEntryCount: function () {
|
|
return _zip.getEntryCount();
|
|
},
|
|
|
|
forEach: function (callback) {
|
|
return _zip.forEach(callback);
|
|
},
|
|
|
|
/**
|
|
* Extracts the given entry to the given targetPath
|
|
* If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
|
|
*
|
|
* @param entry ZipEntry object or String with the full path of the entry
|
|
* @param targetPath Target folder where to write the file
|
|
* @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
|
|
* will be created in targetPath as well. Default is TRUE
|
|
* @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
|
|
* Default is FALSE
|
|
* @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
|
|
* Default is FALSE
|
|
* @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)
|
|
*
|
|
* @return Boolean
|
|
*/
|
|
extractEntryTo: function (
|
|
/**Object*/ entry,
|
|
/**String*/ targetPath,
|
|
/**Boolean*/ maintainEntryPath,
|
|
/**Boolean*/ overwrite,
|
|
/**Boolean*/ keepOriginalPermission,
|
|
/**String**/ outFileName
|
|
) {
|
|
overwrite = get_Bool(overwrite, false);
|
|
keepOriginalPermission = get_Bool(keepOriginalPermission, false);
|
|
maintainEntryPath = get_Bool(maintainEntryPath, true);
|
|
outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));
|
|
|
|
var item = getEntry(entry);
|
|
if (!item) {
|
|
throw new Error(Utils.Errors.NO_ENTRY);
|
|
}
|
|
|
|
var entryName = canonical(item.entryName);
|
|
|
|
var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
|
|
|
|
if (item.isDirectory) {
|
|
var children = _zip.getEntryChildren(item);
|
|
children.forEach(function (child) {
|
|
if (child.isDirectory) return;
|
|
var content = child.getData();
|
|
if (!content) {
|
|
throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
|
|
}
|
|
var name = canonical(child.entryName);
|
|
var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));
|
|
// The reverse operation for attr depend on method addFile()
|
|
const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;
|
|
filetools.writeFileTo(childName, content, overwrite, fileAttr);
|
|
});
|
|
return true;
|
|
}
|
|
|
|
var content = item.getData();
|
|
if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
|
|
|
|
if (filetools.fs.existsSync(target) && !overwrite) {
|
|
throw new Error(Utils.Errors.CANT_OVERRIDE);
|
|
}
|
|
// The reverse operation for attr depend on method addFile()
|
|
const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
|
|
filetools.writeFileTo(target, content, overwrite, fileAttr);
|
|
|
|
return true;
|
|
},
|
|
|
|
/**
|
|
* Test the archive
|
|
*
|
|
*/
|
|
test: function (pass) {
|
|
if (!_zip) {
|
|
return false;
|
|
}
|
|
|
|
for (var entry in _zip.entries) {
|
|
try {
|
|
if (entry.isDirectory) {
|
|
continue;
|
|
}
|
|
var content = _zip.entries[entry].getData(pass);
|
|
if (!content) {
|
|
return false;
|
|
}
|
|
} catch (err) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
|
|
/**
|
|
* Extracts the entire archive to the given location
|
|
*
|
|
* @param targetPath Target location
|
|
* @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
|
|
* Default is FALSE
|
|
* @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
|
|
* Default is FALSE
|
|
*/
|
|
extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {
|
|
overwrite = get_Bool(overwrite, false);
|
|
pass = get_Str(keepOriginalPermission, pass);
|
|
keepOriginalPermission = get_Bool(keepOriginalPermission, false);
|
|
if (!_zip) {
|
|
throw new Error(Utils.Errors.NO_ZIP);
|
|
}
|
|
_zip.entries.forEach(function (entry) {
|
|
var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));
|
|
if (entry.isDirectory) {
|
|
filetools.makeDir(entryName);
|
|
return;
|
|
}
|
|
var content = entry.getData(pass);
|
|
if (!content) {
|
|
throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
|
|
}
|
|
// The reverse operation for attr depend on method addFile()
|
|
const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
|
|
filetools.writeFileTo(entryName, content, overwrite, fileAttr);
|
|
try {
|
|
filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
|
|
} catch (err) {
|
|
throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Asynchronous extractAllTo
|
|
*
|
|
* @param targetPath Target location
|
|
* @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
|
|
* Default is FALSE
|
|
* @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
|
|
* Default is FALSE
|
|
* @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.
|
|
*/
|
|
extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {
|
|
if (!callback) {
|
|
callback = function () {};
|
|
}
|
|
overwrite = get_Bool(overwrite, false);
|
|
if (typeof keepOriginalPermission === "function" && !callback) callback = keepOriginalPermission;
|
|
keepOriginalPermission = get_Bool(keepOriginalPermission, false);
|
|
if (!_zip) {
|
|
callback(new Error(Utils.Errors.NO_ZIP));
|
|
return;
|
|
}
|
|
|
|
targetPath = pth.resolve(targetPath);
|
|
// convert entryName to
|
|
const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));
|
|
const getError = (msg, file) => new Error(msg + ': "' + file + '"');
|
|
|
|
// separate directories from files
|
|
const dirEntries = [];
|
|
const fileEntries = new Set();
|
|
_zip.entries.forEach((e) => {
|
|
if (e.isDirectory) {
|
|
dirEntries.push(e);
|
|
} else {
|
|
fileEntries.add(e);
|
|
}
|
|
});
|
|
|
|
// Create directory entries first synchronously
|
|
// this prevents race condition and assures folders are there before writing files
|
|
for (const entry of dirEntries) {
|
|
const dirPath = getPath(entry);
|
|
// The reverse operation for attr depend on method addFile()
|
|
const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
|
|
try {
|
|
filetools.makeDir(dirPath);
|
|
if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);
|
|
// in unix timestamp will change if files are later added to folder, but still
|
|
filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
|
|
} catch (er) {
|
|
callback(getError("Unable to create folder", dirPath));
|
|
}
|
|
}
|
|
|
|
// callback wrapper, for some house keeping
|
|
const done = () => {
|
|
if (fileEntries.size === 0) {
|
|
callback();
|
|
}
|
|
};
|
|
|
|
// Extract file entries asynchronously
|
|
for (const entry of fileEntries.values()) {
|
|
const entryName = pth.normalize(canonical(entry.entryName.toString()));
|
|
const filePath = sanitize(targetPath, entryName);
|
|
entry.getDataAsync(function (content, err_1) {
|
|
if (err_1) {
|
|
callback(new Error(err_1));
|
|
return;
|
|
}
|
|
if (!content) {
|
|
callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
|
|
} else {
|
|
// The reverse operation for attr depend on method addFile()
|
|
const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
|
|
filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {
|
|
if (!succ) {
|
|
callback(getError("Unable to write file", filePath));
|
|
return;
|
|
}
|
|
filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {
|
|
if (err_2) {
|
|
callback(getError("Unable to set times", filePath));
|
|
return;
|
|
}
|
|
fileEntries.delete(entry);
|
|
// call the callback if it was last entry
|
|
done();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|
|
// call the callback if fileEntries was empty
|
|
done();
|
|
},
|
|
|
|
/**
|
|
* Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
|
|
*
|
|
* @param targetFileName
|
|
* @param callback
|
|
*/
|
|
writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {
|
|
if (arguments.length === 1) {
|
|
if (typeof targetFileName === "function") {
|
|
callback = targetFileName;
|
|
targetFileName = "";
|
|
}
|
|
}
|
|
|
|
if (!targetFileName && opts.filename) {
|
|
targetFileName = opts.filename;
|
|
}
|
|
if (!targetFileName) return;
|
|
|
|
var zipData = _zip.compressToBuffer();
|
|
if (zipData) {
|
|
var ok = filetools.writeFileTo(targetFileName, zipData, true);
|
|
if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
|
|
}
|
|
},
|
|
|
|
writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {
|
|
const { overwrite, perm } = Object.assign({ overwrite: true }, props);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
// find file name
|
|
if (!targetFileName && opts.filename) targetFileName = opts.filename;
|
|
if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
|
|
|
|
this.toBufferPromise().then((zipData) => {
|
|
const ret = (done) => (done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"));
|
|
filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
|
|
}, reject);
|
|
});
|
|
},
|
|
|
|
toBufferPromise: function () {
|
|
return new Promise((resolve, reject) => {
|
|
_zip.toAsyncBuffer(resolve, reject);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Returns the content of the entire zip file as a Buffer object
|
|
*
|
|
* @return Buffer
|
|
*/
|
|
toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {
|
|
this.valueOf = 2;
|
|
if (typeof onSuccess === "function") {
|
|
_zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
|
|
return null;
|
|
}
|
|
return _zip.compressToBuffer();
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9032:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var Utils = __nccwpck_require__(5182),
|
|
Constants = Utils.Constants;
|
|
|
|
/* The central directory file header */
|
|
module.exports = function () {
|
|
var _verMade = 20, // v2.0
|
|
_version = 10, // v1.0
|
|
_flags = 0,
|
|
_method = 0,
|
|
_time = 0,
|
|
_crc = 0,
|
|
_compressedSize = 0,
|
|
_size = 0,
|
|
_fnameLen = 0,
|
|
_extraLen = 0,
|
|
_comLen = 0,
|
|
_diskStart = 0,
|
|
_inattr = 0,
|
|
_attr = 0,
|
|
_offset = 0;
|
|
|
|
_verMade |= Utils.isWin ? 0x0a00 : 0x0300;
|
|
|
|
// Set EFS flag since filename and comment fields are all by default encoded using UTF-8.
|
|
// Without it file names may be corrupted for other apps when file names use unicode chars
|
|
_flags |= Constants.FLG_EFS;
|
|
|
|
var _dataHeader = {};
|
|
|
|
function setTime(val) {
|
|
val = new Date(val);
|
|
_time =
|
|
(((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980
|
|
((val.getMonth() + 1) << 21) | // b05-08 month
|
|
(val.getDate() << 16) | // b00-04 hour
|
|
// 2 bytes time
|
|
(val.getHours() << 11) | // b11-15 hour
|
|
(val.getMinutes() << 5) | // b05-10 minute
|
|
(val.getSeconds() >> 1); // b00-04 seconds divided by 2
|
|
}
|
|
|
|
setTime(+new Date());
|
|
|
|
return {
|
|
get made() {
|
|
return _verMade;
|
|
},
|
|
set made(val) {
|
|
_verMade = val;
|
|
},
|
|
|
|
get version() {
|
|
return _version;
|
|
},
|
|
set version(val) {
|
|
_version = val;
|
|
},
|
|
|
|
get flags() {
|
|
return _flags;
|
|
},
|
|
set flags(val) {
|
|
_flags = val;
|
|
},
|
|
|
|
get method() {
|
|
return _method;
|
|
},
|
|
set method(val) {
|
|
switch (val) {
|
|
case Constants.STORED:
|
|
this.version = 10;
|
|
case Constants.DEFLATED:
|
|
default:
|
|
this.version = 20;
|
|
}
|
|
_method = val;
|
|
},
|
|
|
|
get time() {
|
|
return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);
|
|
},
|
|
set time(val) {
|
|
setTime(val);
|
|
},
|
|
|
|
get crc() {
|
|
return _crc;
|
|
},
|
|
set crc(val) {
|
|
_crc = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get compressedSize() {
|
|
return _compressedSize;
|
|
},
|
|
set compressedSize(val) {
|
|
_compressedSize = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get size() {
|
|
return _size;
|
|
},
|
|
set size(val) {
|
|
_size = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get fileNameLength() {
|
|
return _fnameLen;
|
|
},
|
|
set fileNameLength(val) {
|
|
_fnameLen = val;
|
|
},
|
|
|
|
get extraLength() {
|
|
return _extraLen;
|
|
},
|
|
set extraLength(val) {
|
|
_extraLen = val;
|
|
},
|
|
|
|
get commentLength() {
|
|
return _comLen;
|
|
},
|
|
set commentLength(val) {
|
|
_comLen = val;
|
|
},
|
|
|
|
get diskNumStart() {
|
|
return _diskStart;
|
|
},
|
|
set diskNumStart(val) {
|
|
_diskStart = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get inAttr() {
|
|
return _inattr;
|
|
},
|
|
set inAttr(val) {
|
|
_inattr = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get attr() {
|
|
return _attr;
|
|
},
|
|
set attr(val) {
|
|
_attr = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
// get Unix file permissions
|
|
get fileAttr() {
|
|
return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;
|
|
},
|
|
|
|
get offset() {
|
|
return _offset;
|
|
},
|
|
set offset(val) {
|
|
_offset = Math.max(0, val) >>> 0;
|
|
},
|
|
|
|
get encripted() {
|
|
return (_flags & 1) === 1;
|
|
},
|
|
|
|
get entryHeaderSize() {
|
|
return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
|
|
},
|
|
|
|
get realDataOffset() {
|
|
return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
|
|
},
|
|
|
|
get dataHeader() {
|
|
return _dataHeader;
|
|
},
|
|
|
|
loadDataHeaderFromBinary: function (/*Buffer*/ input) {
|
|
var data = input.slice(_offset, _offset + Constants.LOCHDR);
|
|
// 30 bytes and should start with "PK\003\004"
|
|
if (data.readUInt32LE(0) !== Constants.LOCSIG) {
|
|
throw new Error(Utils.Errors.INVALID_LOC);
|
|
}
|
|
_dataHeader = {
|
|
// version needed to extract
|
|
version: data.readUInt16LE(Constants.LOCVER),
|
|
// general purpose bit flag
|
|
flags: data.readUInt16LE(Constants.LOCFLG),
|
|
// compression method
|
|
method: data.readUInt16LE(Constants.LOCHOW),
|
|
// modification time (2 bytes time, 2 bytes date)
|
|
time: data.readUInt32LE(Constants.LOCTIM),
|
|
// uncompressed file crc-32 value
|
|
crc: data.readUInt32LE(Constants.LOCCRC),
|
|
// compressed size
|
|
compressedSize: data.readUInt32LE(Constants.LOCSIZ),
|
|
// uncompressed size
|
|
size: data.readUInt32LE(Constants.LOCLEN),
|
|
// filename length
|
|
fnameLen: data.readUInt16LE(Constants.LOCNAM),
|
|
// extra field length
|
|
extraLen: data.readUInt16LE(Constants.LOCEXT)
|
|
};
|
|
},
|
|
|
|
loadFromBinary: function (/*Buffer*/ data) {
|
|
// data should be 46 bytes and start with "PK 01 02"
|
|
if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
|
|
throw new Error(Utils.Errors.INVALID_CEN);
|
|
}
|
|
// version made by
|
|
_verMade = data.readUInt16LE(Constants.CENVEM);
|
|
// version needed to extract
|
|
_version = data.readUInt16LE(Constants.CENVER);
|
|
// encrypt, decrypt flags
|
|
_flags = data.readUInt16LE(Constants.CENFLG);
|
|
// compression method
|
|
_method = data.readUInt16LE(Constants.CENHOW);
|
|
// modification time (2 bytes time, 2 bytes date)
|
|
_time = data.readUInt32LE(Constants.CENTIM);
|
|
// uncompressed file crc-32 value
|
|
_crc = data.readUInt32LE(Constants.CENCRC);
|
|
// compressed size
|
|
_compressedSize = data.readUInt32LE(Constants.CENSIZ);
|
|
// uncompressed size
|
|
_size = data.readUInt32LE(Constants.CENLEN);
|
|
// filename length
|
|
_fnameLen = data.readUInt16LE(Constants.CENNAM);
|
|
// extra field length
|
|
_extraLen = data.readUInt16LE(Constants.CENEXT);
|
|
// file comment length
|
|
_comLen = data.readUInt16LE(Constants.CENCOM);
|
|
// volume number start
|
|
_diskStart = data.readUInt16LE(Constants.CENDSK);
|
|
// internal file attributes
|
|
_inattr = data.readUInt16LE(Constants.CENATT);
|
|
// external file attributes
|
|
_attr = data.readUInt32LE(Constants.CENATX);
|
|
// LOC header offset
|
|
_offset = data.readUInt32LE(Constants.CENOFF);
|
|
},
|
|
|
|
dataHeaderToBinary: function () {
|
|
// LOC header size (30 bytes)
|
|
var data = Buffer.alloc(Constants.LOCHDR);
|
|
// "PK\003\004"
|
|
data.writeUInt32LE(Constants.LOCSIG, 0);
|
|
// version needed to extract
|
|
data.writeUInt16LE(_version, Constants.LOCVER);
|
|
// general purpose bit flag
|
|
data.writeUInt16LE(_flags, Constants.LOCFLG);
|
|
// compression method
|
|
data.writeUInt16LE(_method, Constants.LOCHOW);
|
|
// modification time (2 bytes time, 2 bytes date)
|
|
data.writeUInt32LE(_time, Constants.LOCTIM);
|
|
// uncompressed file crc-32 value
|
|
data.writeUInt32LE(_crc, Constants.LOCCRC);
|
|
// compressed size
|
|
data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
|
|
// uncompressed size
|
|
data.writeUInt32LE(_size, Constants.LOCLEN);
|
|
// filename length
|
|
data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
|
|
// extra field length
|
|
data.writeUInt16LE(_extraLen, Constants.LOCEXT);
|
|
return data;
|
|
},
|
|
|
|
entryHeaderToBinary: function () {
|
|
// CEN header size (46 bytes)
|
|
var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);
|
|
// "PK\001\002"
|
|
data.writeUInt32LE(Constants.CENSIG, 0);
|
|
// version made by
|
|
data.writeUInt16LE(_verMade, Constants.CENVEM);
|
|
// version needed to extract
|
|
data.writeUInt16LE(_version, Constants.CENVER);
|
|
// encrypt, decrypt flags
|
|
data.writeUInt16LE(_flags, Constants.CENFLG);
|
|
// compression method
|
|
data.writeUInt16LE(_method, Constants.CENHOW);
|
|
// modification time (2 bytes time, 2 bytes date)
|
|
data.writeUInt32LE(_time, Constants.CENTIM);
|
|
// uncompressed file crc-32 value
|
|
data.writeUInt32LE(_crc, Constants.CENCRC);
|
|
// compressed size
|
|
data.writeUInt32LE(_compressedSize, Constants.CENSIZ);
|
|
// uncompressed size
|
|
data.writeUInt32LE(_size, Constants.CENLEN);
|
|
// filename length
|
|
data.writeUInt16LE(_fnameLen, Constants.CENNAM);
|
|
// extra field length
|
|
data.writeUInt16LE(_extraLen, Constants.CENEXT);
|
|
// file comment length
|
|
data.writeUInt16LE(_comLen, Constants.CENCOM);
|
|
// volume number start
|
|
data.writeUInt16LE(_diskStart, Constants.CENDSK);
|
|
// internal file attributes
|
|
data.writeUInt16LE(_inattr, Constants.CENATT);
|
|
// external file attributes
|
|
data.writeUInt32LE(_attr, Constants.CENATX);
|
|
// LOC header offset
|
|
data.writeUInt32LE(_offset, Constants.CENOFF);
|
|
// fill all with
|
|
data.fill(0x00, Constants.CENHDR);
|
|
return data;
|
|
},
|
|
|
|
toJSON: function () {
|
|
const bytes = function (nr) {
|
|
return nr + " bytes";
|
|
};
|
|
|
|
return {
|
|
made: _verMade,
|
|
version: _version,
|
|
flags: _flags,
|
|
method: Utils.methodToString(_method),
|
|
time: this.time,
|
|
crc: "0x" + _crc.toString(16).toUpperCase(),
|
|
compressedSize: bytes(_compressedSize),
|
|
size: bytes(_size),
|
|
fileNameLength: bytes(_fnameLen),
|
|
extraLength: bytes(_extraLen),
|
|
commentLength: bytes(_comLen),
|
|
diskNumStart: _diskStart,
|
|
inAttr: _inattr,
|
|
attr: _attr,
|
|
offset: _offset,
|
|
entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
|
|
};
|
|
},
|
|
|
|
toString: function () {
|
|
return JSON.stringify(this.toJSON(), null, "\t");
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4958:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
exports.EntryHeader = __nccwpck_require__(9032);
|
|
exports.MainHeader = __nccwpck_require__(4408);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4408:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var Utils = __nccwpck_require__(5182),
|
|
Constants = Utils.Constants;
|
|
|
|
/* The entries in the end of central directory */
|
|
module.exports = function () {
|
|
var _volumeEntries = 0,
|
|
_totalEntries = 0,
|
|
_size = 0,
|
|
_offset = 0,
|
|
_commentLength = 0;
|
|
|
|
return {
|
|
get diskEntries() {
|
|
return _volumeEntries;
|
|
},
|
|
set diskEntries(/*Number*/ val) {
|
|
_volumeEntries = _totalEntries = val;
|
|
},
|
|
|
|
get totalEntries() {
|
|
return _totalEntries;
|
|
},
|
|
set totalEntries(/*Number*/ val) {
|
|
_totalEntries = _volumeEntries = val;
|
|
},
|
|
|
|
get size() {
|
|
return _size;
|
|
},
|
|
set size(/*Number*/ val) {
|
|
_size = val;
|
|
},
|
|
|
|
get offset() {
|
|
return _offset;
|
|
},
|
|
set offset(/*Number*/ val) {
|
|
_offset = val;
|
|
},
|
|
|
|
get commentLength() {
|
|
return _commentLength;
|
|
},
|
|
set commentLength(/*Number*/ val) {
|
|
_commentLength = val;
|
|
},
|
|
|
|
get mainHeaderSize() {
|
|
return Constants.ENDHDR + _commentLength;
|
|
},
|
|
|
|
loadFromBinary: function (/*Buffer*/ data) {
|
|
// data should be 22 bytes and start with "PK 05 06"
|
|
// or be 56+ bytes and start with "PK 06 06" for Zip64
|
|
if (
|
|
(data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&
|
|
(data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)
|
|
) {
|
|
throw new Error(Utils.Errors.INVALID_END);
|
|
}
|
|
|
|
if (data.readUInt32LE(0) === Constants.ENDSIG) {
|
|
// number of entries on this volume
|
|
_volumeEntries = data.readUInt16LE(Constants.ENDSUB);
|
|
// total number of entries
|
|
_totalEntries = data.readUInt16LE(Constants.ENDTOT);
|
|
// central directory size in bytes
|
|
_size = data.readUInt32LE(Constants.ENDSIZ);
|
|
// offset of first CEN header
|
|
_offset = data.readUInt32LE(Constants.ENDOFF);
|
|
// zip file comment length
|
|
_commentLength = data.readUInt16LE(Constants.ENDCOM);
|
|
} else {
|
|
// number of entries on this volume
|
|
_volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);
|
|
// total number of entries
|
|
_totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);
|
|
// central directory size in bytes
|
|
_size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ);
|
|
// offset of first CEN header
|
|
_offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
|
|
|
|
_commentLength = 0;
|
|
}
|
|
},
|
|
|
|
toBinary: function () {
|
|
var b = Buffer.alloc(Constants.ENDHDR + _commentLength);
|
|
// "PK 05 06" signature
|
|
b.writeUInt32LE(Constants.ENDSIG, 0);
|
|
b.writeUInt32LE(0, 4);
|
|
// number of entries on this volume
|
|
b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
|
|
// total number of entries
|
|
b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
|
|
// central directory size in bytes
|
|
b.writeUInt32LE(_size, Constants.ENDSIZ);
|
|
// offset of first CEN header
|
|
b.writeUInt32LE(_offset, Constants.ENDOFF);
|
|
// zip file comment length
|
|
b.writeUInt16LE(_commentLength, Constants.ENDCOM);
|
|
// fill comment memory with spaces so no garbage is left there
|
|
b.fill(" ", Constants.ENDHDR);
|
|
|
|
return b;
|
|
},
|
|
|
|
toJSON: function () {
|
|
// creates 0x0000 style output
|
|
const offset = function (nr, len) {
|
|
let offs = nr.toString(16).toUpperCase();
|
|
while (offs.length < len) offs = "0" + offs;
|
|
return "0x" + offs;
|
|
};
|
|
|
|
return {
|
|
diskEntries: _volumeEntries,
|
|
totalEntries: _totalEntries,
|
|
size: _size + " bytes",
|
|
offset: offset(_offset, 4),
|
|
commentLength: _commentLength
|
|
};
|
|
},
|
|
|
|
toString: function () {
|
|
return JSON.stringify(this.toJSON(), null, "\t");
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7686:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
module.exports = function (/*Buffer*/ inbuf) {
|
|
var zlib = __nccwpck_require__(9796);
|
|
|
|
var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };
|
|
|
|
return {
|
|
deflate: function () {
|
|
return zlib.deflateRawSync(inbuf, opts);
|
|
},
|
|
|
|
deflateAsync: function (/*Function*/ callback) {
|
|
var tmp = zlib.createDeflateRaw(opts),
|
|
parts = [],
|
|
total = 0;
|
|
tmp.on("data", function (data) {
|
|
parts.push(data);
|
|
total += data.length;
|
|
});
|
|
tmp.on("end", function () {
|
|
var buf = Buffer.alloc(total),
|
|
written = 0;
|
|
buf.fill(0);
|
|
for (var i = 0; i < parts.length; i++) {
|
|
var part = parts[i];
|
|
part.copy(buf, written);
|
|
written += part.length;
|
|
}
|
|
callback && callback(buf);
|
|
});
|
|
tmp.end(inbuf);
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3928:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
exports.Deflater = __nccwpck_require__(7686);
|
|
exports.Inflater = __nccwpck_require__(2153);
|
|
exports.ZipCrypto = __nccwpck_require__(3228);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2153:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
module.exports = function (/*Buffer*/ inbuf) {
|
|
var zlib = __nccwpck_require__(9796);
|
|
|
|
return {
|
|
inflate: function () {
|
|
return zlib.inflateRawSync(inbuf);
|
|
},
|
|
|
|
inflateAsync: function (/*Function*/ callback) {
|
|
var tmp = zlib.createInflateRaw(),
|
|
parts = [],
|
|
total = 0;
|
|
tmp.on("data", function (data) {
|
|
parts.push(data);
|
|
total += data.length;
|
|
});
|
|
tmp.on("end", function () {
|
|
var buf = Buffer.alloc(total),
|
|
written = 0;
|
|
buf.fill(0);
|
|
for (var i = 0; i < parts.length; i++) {
|
|
var part = parts[i];
|
|
part.copy(buf, written);
|
|
written += part.length;
|
|
}
|
|
callback && callback(buf);
|
|
});
|
|
tmp.end(inbuf);
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3228:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
// node crypt, we use it for generate salt
|
|
// eslint-disable-next-line node/no-unsupported-features/node-builtins
|
|
const { randomFillSync } = __nccwpck_require__(6113);
|
|
|
|
// generate CRC32 lookup table
|
|
const crctable = new Uint32Array(256).map((t, crc) => {
|
|
for (let j = 0; j < 8; j++) {
|
|
if (0 !== (crc & 1)) {
|
|
crc = (crc >>> 1) ^ 0xedb88320;
|
|
} else {
|
|
crc >>>= 1;
|
|
}
|
|
}
|
|
return crc >>> 0;
|
|
});
|
|
|
|
// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)
|
|
const uMul = (a, b) => Math.imul(a, b) >>> 0;
|
|
|
|
// crc32 byte single update (actually same function is part of utils.crc32 function :) )
|
|
const crc32update = (pCrc32, bval) => {
|
|
return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);
|
|
};
|
|
|
|
// function for generating salt for encrytion header
|
|
const genSalt = () => {
|
|
if ("function" === typeof randomFillSync) {
|
|
return randomFillSync(Buffer.alloc(12));
|
|
} else {
|
|
// fallback if function is not defined
|
|
return genSalt.node();
|
|
}
|
|
};
|
|
|
|
// salt generation with node random function (mainly as fallback)
|
|
genSalt.node = () => {
|
|
const salt = Buffer.alloc(12);
|
|
const len = salt.length;
|
|
for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;
|
|
return salt;
|
|
};
|
|
|
|
// general config
|
|
const config = {
|
|
genSalt
|
|
};
|
|
|
|
// Class Initkeys handles same basic ops with keys
|
|
function Initkeys(pw) {
|
|
const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
|
|
this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);
|
|
for (let i = 0; i < pass.length; i++) {
|
|
this.updateKeys(pass[i]);
|
|
}
|
|
}
|
|
|
|
Initkeys.prototype.updateKeys = function (byteValue) {
|
|
const keys = this.keys;
|
|
keys[0] = crc32update(keys[0], byteValue);
|
|
keys[1] += keys[0] & 0xff;
|
|
keys[1] = uMul(keys[1], 134775813) + 1;
|
|
keys[2] = crc32update(keys[2], keys[1] >>> 24);
|
|
return byteValue;
|
|
};
|
|
|
|
Initkeys.prototype.next = function () {
|
|
const k = (this.keys[2] | 2) >>> 0; // key
|
|
return (uMul(k, k ^ 1) >> 8) & 0xff; // decode
|
|
};
|
|
|
|
function make_decrypter(/*Buffer*/ pwd) {
|
|
// 1. Stage initialize key
|
|
const keys = new Initkeys(pwd);
|
|
|
|
// return decrypter function
|
|
return function (/*Buffer*/ data) {
|
|
// result - we create new Buffer for results
|
|
const result = Buffer.alloc(data.length);
|
|
let pos = 0;
|
|
// process input data
|
|
for (let c of data) {
|
|
//c ^= keys.next();
|
|
//result[pos++] = c; // decode & Save Value
|
|
result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
|
|
function make_encrypter(/*Buffer*/ pwd) {
|
|
// 1. Stage initialize key
|
|
const keys = new Initkeys(pwd);
|
|
|
|
// return encrypting function, result and pos is here so we dont have to merge buffers later
|
|
return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {
|
|
// result - we create new Buffer for results
|
|
if (!result) result = Buffer.alloc(data.length);
|
|
// process input data
|
|
for (let c of data) {
|
|
const k = keys.next(); // save key byte
|
|
result[pos++] = c ^ k; // save val
|
|
keys.updateKeys(c); // update keys with decoded byte
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
|
|
function decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {
|
|
if (!data || !Buffer.isBuffer(data) || data.length < 12) {
|
|
return Buffer.alloc(0);
|
|
}
|
|
|
|
// 1. We Initialize and generate decrypting function
|
|
const decrypter = make_decrypter(pwd);
|
|
|
|
// 2. decrypt salt what is always 12 bytes and is a part of file content
|
|
const salt = decrypter(data.slice(0, 12));
|
|
|
|
// 3. does password meet expectations
|
|
if (salt[11] !== header.crc >>> 24) {
|
|
throw "ADM-ZIP: Wrong Password";
|
|
}
|
|
|
|
// 4. decode content
|
|
return decrypter(data.slice(12));
|
|
}
|
|
|
|
// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality
|
|
function _salter(data) {
|
|
if (Buffer.isBuffer(data) && data.length >= 12) {
|
|
// be aware - currently salting buffer data is modified
|
|
config.genSalt = function () {
|
|
return data.slice(0, 12);
|
|
};
|
|
} else if (data === "node") {
|
|
// test salt generation with node random function
|
|
config.genSalt = genSalt.node;
|
|
} else {
|
|
// if value is not acceptable config gets reset.
|
|
config.genSalt = genSalt;
|
|
}
|
|
}
|
|
|
|
function encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {
|
|
// 1. test data if data is not Buffer we make buffer from it
|
|
if (data == null) data = Buffer.alloc(0);
|
|
// if data is not buffer be make buffer from it
|
|
if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());
|
|
|
|
// 2. We Initialize and generate encrypting function
|
|
const encrypter = make_encrypter(pwd);
|
|
|
|
// 3. generate salt (12-bytes of random data)
|
|
const salt = config.genSalt();
|
|
salt[11] = (header.crc >>> 24) & 0xff;
|
|
|
|
// old implementations (before PKZip 2.04g) used two byte check
|
|
if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;
|
|
|
|
// 4. create output
|
|
const result = Buffer.alloc(data.length + 12);
|
|
encrypter(salt, result);
|
|
|
|
// finally encode content
|
|
return encrypter(data, result, 12);
|
|
}
|
|
|
|
module.exports = { decrypt, encrypt, _salter };
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4522:
|
|
/***/ ((module) => {
|
|
|
|
module.exports = {
|
|
/* The local file header */
|
|
LOCHDR : 30, // LOC header size
|
|
LOCSIG : 0x04034b50, // "PK\003\004"
|
|
LOCVER : 4, // version needed to extract
|
|
LOCFLG : 6, // general purpose bit flag
|
|
LOCHOW : 8, // compression method
|
|
LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)
|
|
LOCCRC : 14, // uncompressed file crc-32 value
|
|
LOCSIZ : 18, // compressed size
|
|
LOCLEN : 22, // uncompressed size
|
|
LOCNAM : 26, // filename length
|
|
LOCEXT : 28, // extra field length
|
|
|
|
/* The Data descriptor */
|
|
EXTSIG : 0x08074b50, // "PK\007\008"
|
|
EXTHDR : 16, // EXT header size
|
|
EXTCRC : 4, // uncompressed file crc-32 value
|
|
EXTSIZ : 8, // compressed size
|
|
EXTLEN : 12, // uncompressed size
|
|
|
|
/* The central directory file header */
|
|
CENHDR : 46, // CEN header size
|
|
CENSIG : 0x02014b50, // "PK\001\002"
|
|
CENVEM : 4, // version made by
|
|
CENVER : 6, // version needed to extract
|
|
CENFLG : 8, // encrypt, decrypt flags
|
|
CENHOW : 10, // compression method
|
|
CENTIM : 12, // modification time (2 bytes time, 2 bytes date)
|
|
CENCRC : 16, // uncompressed file crc-32 value
|
|
CENSIZ : 20, // compressed size
|
|
CENLEN : 24, // uncompressed size
|
|
CENNAM : 28, // filename length
|
|
CENEXT : 30, // extra field length
|
|
CENCOM : 32, // file comment length
|
|
CENDSK : 34, // volume number start
|
|
CENATT : 36, // internal file attributes
|
|
CENATX : 38, // external file attributes (host system dependent)
|
|
CENOFF : 42, // LOC header offset
|
|
|
|
/* The entries in the end of central directory */
|
|
ENDHDR : 22, // END header size
|
|
ENDSIG : 0x06054b50, // "PK\005\006"
|
|
ENDSUB : 8, // number of entries on this disk
|
|
ENDTOT : 10, // total number of entries
|
|
ENDSIZ : 12, // central directory size in bytes
|
|
ENDOFF : 16, // offset of first CEN header
|
|
ENDCOM : 20, // zip file comment length
|
|
|
|
END64HDR : 20, // zip64 END header size
|
|
END64SIG : 0x07064b50, // zip64 Locator signature, "PK\006\007"
|
|
END64START : 4, // number of the disk with the start of the zip64
|
|
END64OFF : 8, // relative offset of the zip64 end of central directory
|
|
END64NUMDISKS : 16, // total number of disks
|
|
|
|
ZIP64SIG : 0x06064b50, // zip64 signature, "PK\006\006"
|
|
ZIP64HDR : 56, // zip64 record minimum size
|
|
ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE
|
|
ZIP64SIZE : 4, // zip64 size of the central directory record
|
|
ZIP64VEM : 12, // zip64 version made by
|
|
ZIP64VER : 14, // zip64 version needed to extract
|
|
ZIP64DSK : 16, // zip64 number of this disk
|
|
ZIP64DSKDIR : 20, // number of the disk with the start of the record directory
|
|
ZIP64SUB : 24, // number of entries on this disk
|
|
ZIP64TOT : 32, // total number of entries
|
|
ZIP64SIZB : 40, // zip64 central directory size in bytes
|
|
ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number
|
|
ZIP64EXTRA : 56, // extensible data sector
|
|
|
|
/* Compression methods */
|
|
STORED : 0, // no compression
|
|
SHRUNK : 1, // shrunk
|
|
REDUCED1 : 2, // reduced with compression factor 1
|
|
REDUCED2 : 3, // reduced with compression factor 2
|
|
REDUCED3 : 4, // reduced with compression factor 3
|
|
REDUCED4 : 5, // reduced with compression factor 4
|
|
IMPLODED : 6, // imploded
|
|
// 7 reserved for Tokenizing compression algorithm
|
|
DEFLATED : 8, // deflated
|
|
ENHANCED_DEFLATED: 9, // enhanced deflated
|
|
PKWARE : 10,// PKWare DCL imploded
|
|
// 11 reserved by PKWARE
|
|
BZIP2 : 12, // compressed using BZIP2
|
|
// 13 reserved by PKWARE
|
|
LZMA : 14, // LZMA
|
|
// 15-17 reserved by PKWARE
|
|
IBM_TERSE : 18, // compressed using IBM TERSE
|
|
IBM_LZ77 : 19, // IBM LZ77 z
|
|
AES_ENCRYPT : 99, // WinZIP AES encryption method
|
|
|
|
/* General purpose bit flag */
|
|
// values can obtained with expression 2**bitnr
|
|
FLG_ENC : 1, // Bit 0: encrypted file
|
|
FLG_COMP1 : 2, // Bit 1, compression option
|
|
FLG_COMP2 : 4, // Bit 2, compression option
|
|
FLG_DESC : 8, // Bit 3, data descriptor
|
|
FLG_ENH : 16, // Bit 4, enhanced deflating
|
|
FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.
|
|
FLG_STR : 64, // Bit 6, strong encryption (patented)
|
|
// Bits 7-10: Currently unused.
|
|
FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)
|
|
// Bit 12: Reserved by PKWARE for enhanced compression.
|
|
// Bit 13: encrypted the Central Directory (patented).
|
|
// Bits 14-15: Reserved by PKWARE.
|
|
FLG_MSK : 4096, // mask header values
|
|
|
|
/* Load type */
|
|
FILE : 2,
|
|
BUFFER : 1,
|
|
NONE : 0,
|
|
|
|
/* 4.5 Extensible data fields */
|
|
EF_ID : 0,
|
|
EF_SIZE : 2,
|
|
|
|
/* Header IDs */
|
|
ID_ZIP64 : 0x0001,
|
|
ID_AVINFO : 0x0007,
|
|
ID_PFS : 0x0008,
|
|
ID_OS2 : 0x0009,
|
|
ID_NTFS : 0x000a,
|
|
ID_OPENVMS : 0x000c,
|
|
ID_UNIX : 0x000d,
|
|
ID_FORK : 0x000e,
|
|
ID_PATCH : 0x000f,
|
|
ID_X509_PKCS7 : 0x0014,
|
|
ID_X509_CERTID_F : 0x0015,
|
|
ID_X509_CERTID_C : 0x0016,
|
|
ID_STRONGENC : 0x0017,
|
|
ID_RECORD_MGT : 0x0018,
|
|
ID_X509_PKCS7_RL : 0x0019,
|
|
ID_IBM1 : 0x0065,
|
|
ID_IBM2 : 0x0066,
|
|
ID_POSZIP : 0x4690,
|
|
|
|
EF_ZIP64_OR_32 : 0xffffffff,
|
|
EF_ZIP64_OR_16 : 0xffff,
|
|
EF_ZIP64_SUNCOMP : 0,
|
|
EF_ZIP64_SCOMP : 8,
|
|
EF_ZIP64_RHO : 16,
|
|
EF_ZIP64_DSN : 24
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1255:
|
|
/***/ ((module) => {
|
|
|
|
module.exports = {
|
|
/* Header error messages */
|
|
INVALID_LOC: "Invalid LOC header (bad signature)",
|
|
INVALID_CEN: "Invalid CEN header (bad signature)",
|
|
INVALID_END: "Invalid END header (bad signature)",
|
|
|
|
/* ZipEntry error messages*/
|
|
NO_DATA: "Nothing to decompress",
|
|
BAD_CRC: "CRC32 checksum failed",
|
|
FILE_IN_THE_WAY: "There is a file in the way: %s",
|
|
UNKNOWN_METHOD: "Invalid/unsupported compression method",
|
|
|
|
/* Inflater error messages */
|
|
AVAIL_DATA: "inflate::Available inflate data did not terminate",
|
|
INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
|
|
TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
|
|
INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
|
|
INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
|
|
INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
|
|
INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
|
|
INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
|
|
INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
|
|
INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
|
|
|
|
/* ADM-ZIP error messages */
|
|
CANT_EXTRACT_FILE: "Could not extract the file",
|
|
CANT_OVERRIDE: "Target file already exists",
|
|
NO_ZIP: "No zip file was loaded",
|
|
NO_ENTRY: "Entry doesn't exist",
|
|
DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
|
|
FILE_NOT_FOUND: "File not found: %s",
|
|
NOT_IMPLEMENTED: "Not implemented",
|
|
INVALID_FILENAME: "Invalid filename",
|
|
INVALID_FORMAT: "Invalid or unsupported zip format. No END header found"
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8321:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
const fs = (__nccwpck_require__(2895).require)();
|
|
const pth = __nccwpck_require__(1017);
|
|
|
|
fs.existsSync = fs.existsSync || pth.existsSync;
|
|
|
|
module.exports = function (/*String*/ path) {
|
|
var _path = path || "",
|
|
_obj = newAttr(),
|
|
_stat = null;
|
|
|
|
function newAttr() {
|
|
return {
|
|
directory: false,
|
|
readonly: false,
|
|
hidden: false,
|
|
executable: false,
|
|
mtime: 0,
|
|
atime: 0
|
|
};
|
|
}
|
|
|
|
if (_path && fs.existsSync(_path)) {
|
|
_stat = fs.statSync(_path);
|
|
_obj.directory = _stat.isDirectory();
|
|
_obj.mtime = _stat.mtime;
|
|
_obj.atime = _stat.atime;
|
|
_obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner
|
|
_obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right
|
|
_obj.hidden = pth.basename(_path)[0] === ".";
|
|
} else {
|
|
console.warn("Invalid path: " + _path);
|
|
}
|
|
|
|
return {
|
|
get directory() {
|
|
return _obj.directory;
|
|
},
|
|
|
|
get readOnly() {
|
|
return _obj.readonly;
|
|
},
|
|
|
|
get hidden() {
|
|
return _obj.hidden;
|
|
},
|
|
|
|
get mtime() {
|
|
return _obj.mtime;
|
|
},
|
|
|
|
get atime() {
|
|
return _obj.atime;
|
|
},
|
|
|
|
get executable() {
|
|
return _obj.executable;
|
|
},
|
|
|
|
decodeAttributes: function () {},
|
|
|
|
encodeAttributes: function () {},
|
|
|
|
toJSON: function () {
|
|
return {
|
|
path: _path,
|
|
isDirectory: _obj.directory,
|
|
isReadOnly: _obj.readonly,
|
|
isHidden: _obj.hidden,
|
|
isExecutable: _obj.executable,
|
|
mTime: _obj.mtime,
|
|
aTime: _obj.atime
|
|
};
|
|
},
|
|
|
|
toString: function () {
|
|
return JSON.stringify(this.toJSON(), null, "\t");
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2895:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
exports.require = function () {
|
|
if (typeof process === "object" && process.versions && process.versions["electron"]) {
|
|
try {
|
|
const originalFs = __nccwpck_require__(2941);
|
|
if (Object.keys(originalFs).length > 0) {
|
|
return originalFs;
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
return __nccwpck_require__(7147);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5182:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
module.exports = __nccwpck_require__(1291);
|
|
module.exports.Constants = __nccwpck_require__(4522);
|
|
module.exports.Errors = __nccwpck_require__(1255);
|
|
module.exports.FileAttr = __nccwpck_require__(8321);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1291:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
const fsystem = (__nccwpck_require__(2895).require)();
|
|
const pth = __nccwpck_require__(1017);
|
|
const Constants = __nccwpck_require__(4522);
|
|
const isWin = typeof process === "object" && "win32" === process.platform;
|
|
|
|
const is_Obj = (obj) => obj && typeof obj === "object";
|
|
|
|
// generate CRC32 lookup table
|
|
const crcTable = new Uint32Array(256).map((t, c) => {
|
|
for (let k = 0; k < 8; k++) {
|
|
if ((c & 1) !== 0) {
|
|
c = 0xedb88320 ^ (c >>> 1);
|
|
} else {
|
|
c >>>= 1;
|
|
}
|
|
}
|
|
return c >>> 0;
|
|
});
|
|
|
|
// UTILS functions
|
|
|
|
function Utils(opts) {
|
|
this.sep = pth.sep;
|
|
this.fs = fsystem;
|
|
|
|
if (is_Obj(opts)) {
|
|
// custom filesystem
|
|
if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
|
|
this.fs = opts.fs;
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = Utils;
|
|
|
|
// INSTANCED functions
|
|
|
|
Utils.prototype.makeDir = function (/*String*/ folder) {
|
|
const self = this;
|
|
|
|
// Sync - make directories tree
|
|
function mkdirSync(/*String*/ fpath) {
|
|
let resolvedPath = fpath.split(self.sep)[0];
|
|
fpath.split(self.sep).forEach(function (name) {
|
|
if (!name || name.substr(-1, 1) === ":") return;
|
|
resolvedPath += self.sep + name;
|
|
var stat;
|
|
try {
|
|
stat = self.fs.statSync(resolvedPath);
|
|
} catch (e) {
|
|
self.fs.mkdirSync(resolvedPath);
|
|
}
|
|
if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
|
|
});
|
|
}
|
|
|
|
mkdirSync(folder);
|
|
};
|
|
|
|
Utils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {
|
|
const self = this;
|
|
if (self.fs.existsSync(path)) {
|
|
if (!overwrite) return false; // cannot overwrite
|
|
|
|
var stat = self.fs.statSync(path);
|
|
if (stat.isDirectory()) {
|
|
return false;
|
|
}
|
|
}
|
|
var folder = pth.dirname(path);
|
|
if (!self.fs.existsSync(folder)) {
|
|
self.makeDir(folder);
|
|
}
|
|
|
|
var fd;
|
|
try {
|
|
fd = self.fs.openSync(path, "w", 438); // 0666
|
|
} catch (e) {
|
|
self.fs.chmodSync(path, 438);
|
|
fd = self.fs.openSync(path, "w", 438);
|
|
}
|
|
if (fd) {
|
|
try {
|
|
self.fs.writeSync(fd, content, 0, content.length, 0);
|
|
} finally {
|
|
self.fs.closeSync(fd);
|
|
}
|
|
}
|
|
self.fs.chmodSync(path, attr || 438);
|
|
return true;
|
|
};
|
|
|
|
Utils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {
|
|
if (typeof attr === "function") {
|
|
callback = attr;
|
|
attr = undefined;
|
|
}
|
|
|
|
const self = this;
|
|
|
|
self.fs.exists(path, function (exist) {
|
|
if (exist && !overwrite) return callback(false);
|
|
|
|
self.fs.stat(path, function (err, stat) {
|
|
if (exist && stat.isDirectory()) {
|
|
return callback(false);
|
|
}
|
|
|
|
var folder = pth.dirname(path);
|
|
self.fs.exists(folder, function (exists) {
|
|
if (!exists) self.makeDir(folder);
|
|
|
|
self.fs.open(path, "w", 438, function (err, fd) {
|
|
if (err) {
|
|
self.fs.chmod(path, 438, function () {
|
|
self.fs.open(path, "w", 438, function (err, fd) {
|
|
self.fs.write(fd, content, 0, content.length, 0, function () {
|
|
self.fs.close(fd, function () {
|
|
self.fs.chmod(path, attr || 438, function () {
|
|
callback(true);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
} else if (fd) {
|
|
self.fs.write(fd, content, 0, content.length, 0, function () {
|
|
self.fs.close(fd, function () {
|
|
self.fs.chmod(path, attr || 438, function () {
|
|
callback(true);
|
|
});
|
|
});
|
|
});
|
|
} else {
|
|
self.fs.chmod(path, attr || 438, function () {
|
|
callback(true);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
Utils.prototype.findFiles = function (/*String*/ path) {
|
|
const self = this;
|
|
|
|
function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {
|
|
if (typeof pattern === "boolean") {
|
|
recursive = pattern;
|
|
pattern = undefined;
|
|
}
|
|
let files = [];
|
|
self.fs.readdirSync(dir).forEach(function (file) {
|
|
var path = pth.join(dir, file);
|
|
|
|
if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));
|
|
|
|
if (!pattern || pattern.test(path)) {
|
|
files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : ""));
|
|
}
|
|
});
|
|
return files;
|
|
}
|
|
|
|
return findSync(path, undefined, true);
|
|
};
|
|
|
|
Utils.prototype.getAttributes = function () {};
|
|
|
|
Utils.prototype.setAttributes = function () {};
|
|
|
|
// STATIC functions
|
|
|
|
// crc32 single update (it is part of crc32)
|
|
Utils.crc32update = function (crc, byte) {
|
|
return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);
|
|
};
|
|
|
|
Utils.crc32 = function (buf) {
|
|
if (typeof buf === "string") {
|
|
buf = Buffer.from(buf, "utf8");
|
|
}
|
|
// Generate crcTable
|
|
if (!crcTable.length) genCRCTable();
|
|
|
|
let len = buf.length;
|
|
let crc = ~0;
|
|
for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);
|
|
// xor and cast as uint32 number
|
|
return ~crc >>> 0;
|
|
};
|
|
|
|
Utils.methodToString = function (/*Number*/ method) {
|
|
switch (method) {
|
|
case Constants.STORED:
|
|
return "STORED (" + method + ")";
|
|
case Constants.DEFLATED:
|
|
return "DEFLATED (" + method + ")";
|
|
default:
|
|
return "UNSUPPORTED (" + method + ")";
|
|
}
|
|
};
|
|
|
|
// removes ".." style path elements
|
|
Utils.canonical = function (/*string*/ path) {
|
|
if (!path) return "";
|
|
// trick normalize think path is absolute
|
|
var safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
|
|
return pth.join(".", safeSuffix);
|
|
};
|
|
|
|
// make abolute paths taking prefix as root folder
|
|
Utils.sanitize = function (/*string*/ prefix, /*string*/ name) {
|
|
prefix = pth.resolve(pth.normalize(prefix));
|
|
var parts = name.split("/");
|
|
for (var i = 0, l = parts.length; i < l; i++) {
|
|
var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
|
|
if (path.indexOf(prefix) === 0) {
|
|
return path;
|
|
}
|
|
}
|
|
return pth.normalize(pth.join(prefix, pth.basename(name)));
|
|
};
|
|
|
|
// converts buffer, Uint8Array, string types to buffer
|
|
Utils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {
|
|
if (Buffer.isBuffer(input)) {
|
|
return input;
|
|
} else if (input instanceof Uint8Array) {
|
|
return Buffer.from(input);
|
|
} else {
|
|
// expect string all other values are invalid and return empty buffer
|
|
return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0);
|
|
}
|
|
};
|
|
|
|
Utils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {
|
|
var slice = Buffer.from(buffer.slice(index, index + 8));
|
|
slice.swap64();
|
|
|
|
return parseInt(`0x${slice.toString("hex")}`);
|
|
};
|
|
|
|
Utils.isWin = isWin; // Do we have windows system
|
|
Utils.crcTable = crcTable;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4057:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var Utils = __nccwpck_require__(5182),
|
|
Headers = __nccwpck_require__(4958),
|
|
Constants = Utils.Constants,
|
|
Methods = __nccwpck_require__(3928);
|
|
|
|
module.exports = function (/*Buffer*/ input) {
|
|
var _entryHeader = new Headers.EntryHeader(),
|
|
_entryName = Buffer.alloc(0),
|
|
_comment = Buffer.alloc(0),
|
|
_isDirectory = false,
|
|
uncompressedData = null,
|
|
_extra = Buffer.alloc(0);
|
|
|
|
function getCompressedDataFromZip() {
|
|
if (!input || !Buffer.isBuffer(input)) {
|
|
return Buffer.alloc(0);
|
|
}
|
|
_entryHeader.loadDataHeaderFromBinary(input);
|
|
return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
|
|
}
|
|
|
|
function crc32OK(data) {
|
|
// if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
|
|
if ((_entryHeader.flags & 0x8) !== 0x8) {
|
|
if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
|
|
return false;
|
|
}
|
|
} else {
|
|
// @TODO: load and check data descriptor header
|
|
// The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
|
|
// (optionally preceded by a 4-byte signature) immediately after the compressed data:
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {
|
|
if (typeof callback === "undefined" && typeof async === "string") {
|
|
pass = async;
|
|
async = void 0;
|
|
}
|
|
if (_isDirectory) {
|
|
if (async && callback) {
|
|
callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
|
|
}
|
|
return Buffer.alloc(0);
|
|
}
|
|
|
|
var compressedData = getCompressedDataFromZip();
|
|
|
|
if (compressedData.length === 0) {
|
|
// File is empty, nothing to decompress.
|
|
if (async && callback) callback(compressedData);
|
|
return compressedData;
|
|
}
|
|
|
|
if (_entryHeader.encripted) {
|
|
if ("string" !== typeof pass && !Buffer.isBuffer(pass)) {
|
|
throw new Error("ADM-ZIP: Incompatible password parameter");
|
|
}
|
|
compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);
|
|
}
|
|
|
|
var data = Buffer.alloc(_entryHeader.size);
|
|
|
|
switch (_entryHeader.method) {
|
|
case Utils.Constants.STORED:
|
|
compressedData.copy(data);
|
|
if (!crc32OK(data)) {
|
|
if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
|
|
throw new Error(Utils.Errors.BAD_CRC);
|
|
} else {
|
|
//si added otherwise did not seem to return data.
|
|
if (async && callback) callback(data);
|
|
return data;
|
|
}
|
|
case Utils.Constants.DEFLATED:
|
|
var inflater = new Methods.Inflater(compressedData);
|
|
if (!async) {
|
|
const result = inflater.inflate(data);
|
|
result.copy(data, 0);
|
|
if (!crc32OK(data)) {
|
|
throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString());
|
|
}
|
|
return data;
|
|
} else {
|
|
inflater.inflateAsync(function (result) {
|
|
result.copy(result, 0);
|
|
if (callback) {
|
|
if (!crc32OK(result)) {
|
|
callback(result, Utils.Errors.BAD_CRC); //si added error
|
|
} else {
|
|
callback(result);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
break;
|
|
default:
|
|
if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
|
|
throw new Error(Utils.Errors.UNKNOWN_METHOD);
|
|
}
|
|
}
|
|
|
|
function compress(/*Boolean*/ async, /*Function*/ callback) {
|
|
if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
|
|
// no data set or the data wasn't changed to require recompression
|
|
if (async && callback) callback(getCompressedDataFromZip());
|
|
return getCompressedDataFromZip();
|
|
}
|
|
|
|
if (uncompressedData.length && !_isDirectory) {
|
|
var compressedData;
|
|
// Local file header
|
|
switch (_entryHeader.method) {
|
|
case Utils.Constants.STORED:
|
|
_entryHeader.compressedSize = _entryHeader.size;
|
|
|
|
compressedData = Buffer.alloc(uncompressedData.length);
|
|
uncompressedData.copy(compressedData);
|
|
|
|
if (async && callback) callback(compressedData);
|
|
return compressedData;
|
|
default:
|
|
case Utils.Constants.DEFLATED:
|
|
var deflater = new Methods.Deflater(uncompressedData);
|
|
if (!async) {
|
|
var deflated = deflater.deflate();
|
|
_entryHeader.compressedSize = deflated.length;
|
|
return deflated;
|
|
} else {
|
|
deflater.deflateAsync(function (data) {
|
|
compressedData = Buffer.alloc(data.length);
|
|
_entryHeader.compressedSize = data.length;
|
|
data.copy(compressedData);
|
|
callback && callback(compressedData);
|
|
});
|
|
}
|
|
deflater = null;
|
|
break;
|
|
}
|
|
} else if (async && callback) {
|
|
callback(Buffer.alloc(0));
|
|
} else {
|
|
return Buffer.alloc(0);
|
|
}
|
|
}
|
|
|
|
function readUInt64LE(buffer, offset) {
|
|
return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
|
|
}
|
|
|
|
function parseExtra(data) {
|
|
var offset = 0;
|
|
var signature, size, part;
|
|
while (offset < data.length) {
|
|
signature = data.readUInt16LE(offset);
|
|
offset += 2;
|
|
size = data.readUInt16LE(offset);
|
|
offset += 2;
|
|
part = data.slice(offset, offset + size);
|
|
offset += size;
|
|
if (Constants.ID_ZIP64 === signature) {
|
|
parseZip64ExtendedInformation(part);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Override header field values with values from the ZIP64 extra field
|
|
function parseZip64ExtendedInformation(data) {
|
|
var size, compressedSize, offset, diskNumStart;
|
|
|
|
if (data.length >= Constants.EF_ZIP64_SCOMP) {
|
|
size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
|
|
if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
|
|
_entryHeader.size = size;
|
|
}
|
|
}
|
|
if (data.length >= Constants.EF_ZIP64_RHO) {
|
|
compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
|
|
if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
|
|
_entryHeader.compressedSize = compressedSize;
|
|
}
|
|
}
|
|
if (data.length >= Constants.EF_ZIP64_DSN) {
|
|
offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
|
|
if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
|
|
_entryHeader.offset = offset;
|
|
}
|
|
}
|
|
if (data.length >= Constants.EF_ZIP64_DSN + 4) {
|
|
diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
|
|
if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
|
|
_entryHeader.diskNumStart = diskNumStart;
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
get entryName() {
|
|
return _entryName.toString();
|
|
},
|
|
get rawEntryName() {
|
|
return _entryName;
|
|
},
|
|
set entryName(val) {
|
|
_entryName = Utils.toBuffer(val);
|
|
var lastChar = _entryName[_entryName.length - 1];
|
|
_isDirectory = lastChar === 47 || lastChar === 92;
|
|
_entryHeader.fileNameLength = _entryName.length;
|
|
},
|
|
|
|
get extra() {
|
|
return _extra;
|
|
},
|
|
set extra(val) {
|
|
_extra = val;
|
|
_entryHeader.extraLength = val.length;
|
|
parseExtra(val);
|
|
},
|
|
|
|
get comment() {
|
|
return _comment.toString();
|
|
},
|
|
set comment(val) {
|
|
_comment = Utils.toBuffer(val);
|
|
_entryHeader.commentLength = _comment.length;
|
|
},
|
|
|
|
get name() {
|
|
var n = _entryName.toString();
|
|
return _isDirectory
|
|
? n
|
|
.substr(n.length - 1)
|
|
.split("/")
|
|
.pop()
|
|
: n.split("/").pop();
|
|
},
|
|
get isDirectory() {
|
|
return _isDirectory;
|
|
},
|
|
|
|
getCompressedData: function () {
|
|
return compress(false, null);
|
|
},
|
|
|
|
getCompressedDataAsync: function (/*Function*/ callback) {
|
|
compress(true, callback);
|
|
},
|
|
|
|
setData: function (value) {
|
|
uncompressedData = Utils.toBuffer(value);
|
|
if (!_isDirectory && uncompressedData.length) {
|
|
_entryHeader.size = uncompressedData.length;
|
|
_entryHeader.method = Utils.Constants.DEFLATED;
|
|
_entryHeader.crc = Utils.crc32(value);
|
|
_entryHeader.changed = true;
|
|
} else {
|
|
// folders and blank files should be stored
|
|
_entryHeader.method = Utils.Constants.STORED;
|
|
}
|
|
},
|
|
|
|
getData: function (pass) {
|
|
if (_entryHeader.changed) {
|
|
return uncompressedData;
|
|
} else {
|
|
return decompress(false, null, pass);
|
|
}
|
|
},
|
|
|
|
getDataAsync: function (/*Function*/ callback, pass) {
|
|
if (_entryHeader.changed) {
|
|
callback(uncompressedData);
|
|
} else {
|
|
decompress(true, callback, pass);
|
|
}
|
|
},
|
|
|
|
set attr(attr) {
|
|
_entryHeader.attr = attr;
|
|
},
|
|
get attr() {
|
|
return _entryHeader.attr;
|
|
},
|
|
|
|
set header(/*Buffer*/ data) {
|
|
_entryHeader.loadFromBinary(data);
|
|
},
|
|
|
|
get header() {
|
|
return _entryHeader;
|
|
},
|
|
|
|
packHeader: function () {
|
|
// 1. create header (buffer)
|
|
var header = _entryHeader.entryHeaderToBinary();
|
|
var addpos = Utils.Constants.CENHDR;
|
|
// 2. add file name
|
|
_entryName.copy(header, addpos);
|
|
addpos += _entryName.length;
|
|
// 3. add extra data
|
|
if (_entryHeader.extraLength) {
|
|
_extra.copy(header, addpos);
|
|
addpos += _entryHeader.extraLength;
|
|
}
|
|
// 4. add file comment
|
|
if (_entryHeader.commentLength) {
|
|
_comment.copy(header, addpos);
|
|
}
|
|
return header;
|
|
},
|
|
|
|
toJSON: function () {
|
|
const bytes = function (nr) {
|
|
return "<" + ((nr && nr.length + " bytes buffer") || "null") + ">";
|
|
};
|
|
|
|
return {
|
|
entryName: this.entryName,
|
|
name: this.name,
|
|
comment: this.comment,
|
|
isDirectory: this.isDirectory,
|
|
header: _entryHeader.toJSON(),
|
|
compressedData: bytes(input),
|
|
data: bytes(uncompressedData)
|
|
};
|
|
},
|
|
|
|
toString: function () {
|
|
return JSON.stringify(this.toJSON(), null, "\t");
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7744:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
const ZipEntry = __nccwpck_require__(4057);
|
|
const Headers = __nccwpck_require__(4958);
|
|
const Utils = __nccwpck_require__(5182);
|
|
|
|
module.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {
|
|
var entryList = [],
|
|
entryTable = {},
|
|
_comment = Buffer.alloc(0),
|
|
mainHeader = new Headers.MainHeader(),
|
|
loadedEntries = false;
|
|
|
|
// assign options
|
|
const opts = Object.assign(Object.create(null), options);
|
|
|
|
const { noSort } = opts;
|
|
|
|
if (inBuffer) {
|
|
// is a memory buffer
|
|
readMainHeader(opts.readEntries);
|
|
} else {
|
|
// none. is a new file
|
|
loadedEntries = true;
|
|
}
|
|
|
|
function iterateEntries(callback) {
|
|
const totalEntries = mainHeader.diskEntries; // total number of entries
|
|
let index = mainHeader.offset; // offset of first CEN header
|
|
|
|
for (let i = 0; i < totalEntries; i++) {
|
|
let tmp = index;
|
|
const entry = new ZipEntry(inBuffer);
|
|
|
|
entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));
|
|
entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));
|
|
|
|
index += entry.header.entryHeaderSize;
|
|
|
|
callback(entry);
|
|
}
|
|
}
|
|
|
|
function readEntries() {
|
|
loadedEntries = true;
|
|
entryTable = {};
|
|
entryList = new Array(mainHeader.diskEntries); // total number of entries
|
|
var index = mainHeader.offset; // offset of first CEN header
|
|
for (var i = 0; i < entryList.length; i++) {
|
|
var tmp = index,
|
|
entry = new ZipEntry(inBuffer);
|
|
entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));
|
|
|
|
entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));
|
|
|
|
if (entry.header.extraLength) {
|
|
entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));
|
|
}
|
|
|
|
if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
|
|
|
|
index += entry.header.entryHeaderSize;
|
|
|
|
entryList[i] = entry;
|
|
entryTable[entry.entryName] = entry;
|
|
}
|
|
}
|
|
|
|
function readMainHeader(/*Boolean*/ readNow) {
|
|
var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size
|
|
max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length
|
|
n = max,
|
|
endStart = inBuffer.length,
|
|
endOffset = -1, // Start offset of the END header
|
|
commentEnd = 0;
|
|
|
|
for (i; i >= n; i--) {
|
|
if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
|
|
if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
|
|
// "PK\005\006"
|
|
endOffset = i;
|
|
commentEnd = i;
|
|
endStart = i + Utils.Constants.ENDHDR;
|
|
// We already found a regular signature, let's look just a bit further to check if there's any zip64 signature
|
|
n = i - Utils.Constants.END64HDR;
|
|
continue;
|
|
}
|
|
|
|
if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
|
|
// Found a zip64 signature, let's continue reading the whole zip64 record
|
|
n = max;
|
|
continue;
|
|
}
|
|
|
|
if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
|
|
// Found the zip64 record, let's determine it's size
|
|
endOffset = i;
|
|
endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);
|
|
|
|
mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
|
|
if (mainHeader.commentLength) {
|
|
_comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
|
|
}
|
|
if (readNow) readEntries();
|
|
}
|
|
|
|
function sortEntries() {
|
|
if (entryList.length > 1 && !noSort) {
|
|
entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
|
|
}
|
|
}
|
|
|
|
return {
|
|
/**
|
|
* Returns an array of ZipEntry objects existent in the current opened archive
|
|
* @return Array
|
|
*/
|
|
get entries() {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
return entryList;
|
|
},
|
|
|
|
/**
|
|
* Archive comment
|
|
* @return {String}
|
|
*/
|
|
get comment() {
|
|
return _comment.toString();
|
|
},
|
|
set comment(val) {
|
|
_comment = Utils.toBuffer(val);
|
|
mainHeader.commentLength = _comment.length;
|
|
},
|
|
|
|
getEntryCount: function () {
|
|
if (!loadedEntries) {
|
|
return mainHeader.diskEntries;
|
|
}
|
|
|
|
return entryList.length;
|
|
},
|
|
|
|
forEach: function (callback) {
|
|
if (!loadedEntries) {
|
|
iterateEntries(callback);
|
|
return;
|
|
}
|
|
|
|
entryList.forEach(callback);
|
|
},
|
|
|
|
/**
|
|
* Returns a reference to the entry with the given name or null if entry is inexistent
|
|
*
|
|
* @param entryName
|
|
* @return ZipEntry
|
|
*/
|
|
getEntry: function (/*String*/ entryName) {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
return entryTable[entryName] || null;
|
|
},
|
|
|
|
/**
|
|
* Adds the given entry to the entry list
|
|
*
|
|
* @param entry
|
|
*/
|
|
setEntry: function (/*ZipEntry*/ entry) {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
entryList.push(entry);
|
|
entryTable[entry.entryName] = entry;
|
|
mainHeader.totalEntries = entryList.length;
|
|
},
|
|
|
|
/**
|
|
* Removes the entry with the given name from the entry list.
|
|
*
|
|
* If the entry is a directory, then all nested files and directories will be removed
|
|
* @param entryName
|
|
*/
|
|
deleteEntry: function (/*String*/ entryName) {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
var entry = entryTable[entryName];
|
|
if (entry && entry.isDirectory) {
|
|
var _self = this;
|
|
this.getEntryChildren(entry).forEach(function (child) {
|
|
if (child.entryName !== entryName) {
|
|
_self.deleteEntry(child.entryName);
|
|
}
|
|
});
|
|
}
|
|
entryList.splice(entryList.indexOf(entry), 1);
|
|
delete entryTable[entryName];
|
|
mainHeader.totalEntries = entryList.length;
|
|
},
|
|
|
|
/**
|
|
* Iterates and returns all nested files and directories of the given entry
|
|
*
|
|
* @param entry
|
|
* @return Array
|
|
*/
|
|
getEntryChildren: function (/*ZipEntry*/ entry) {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
if (entry && entry.isDirectory) {
|
|
const list = [];
|
|
const name = entry.entryName;
|
|
const len = name.length;
|
|
|
|
entryList.forEach(function (zipEntry) {
|
|
if (zipEntry.entryName.substr(0, len) === name) {
|
|
list.push(zipEntry);
|
|
}
|
|
});
|
|
return list;
|
|
}
|
|
return [];
|
|
},
|
|
|
|
/**
|
|
* Returns the zip file
|
|
*
|
|
* @return Buffer
|
|
*/
|
|
compressToBuffer: function () {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
sortEntries();
|
|
|
|
const dataBlock = [];
|
|
const entryHeaders = [];
|
|
let totalSize = 0;
|
|
let dindex = 0;
|
|
|
|
mainHeader.size = 0;
|
|
mainHeader.offset = 0;
|
|
|
|
for (const entry of entryList) {
|
|
// compress data and set local and entry header accordingly. Reason why is called first
|
|
const compressedData = entry.getCompressedData();
|
|
// 1. construct data header
|
|
entry.header.offset = dindex;
|
|
const dataHeader = entry.header.dataHeaderToBinary();
|
|
const entryNameLen = entry.rawEntryName.length;
|
|
// 1.2. postheader - data after data header
|
|
const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);
|
|
entry.rawEntryName.copy(postHeader, 0);
|
|
postHeader.copy(entry.extra, entryNameLen);
|
|
|
|
// 2. offsets
|
|
const dataLength = dataHeader.length + postHeader.length + compressedData.length;
|
|
dindex += dataLength;
|
|
|
|
// 3. store values in sequence
|
|
dataBlock.push(dataHeader);
|
|
dataBlock.push(postHeader);
|
|
dataBlock.push(compressedData);
|
|
|
|
// 4. construct entry header
|
|
const entryHeader = entry.packHeader();
|
|
entryHeaders.push(entryHeader);
|
|
// 5. update main header
|
|
mainHeader.size += entryHeader.length;
|
|
totalSize += dataLength + entryHeader.length;
|
|
}
|
|
|
|
totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
|
|
// point to end of data and beginning of central directory first record
|
|
mainHeader.offset = dindex;
|
|
|
|
dindex = 0;
|
|
const outBuffer = Buffer.alloc(totalSize);
|
|
// write data blocks
|
|
for (const content of dataBlock) {
|
|
content.copy(outBuffer, dindex);
|
|
dindex += content.length;
|
|
}
|
|
|
|
// write central directory entries
|
|
for (const content of entryHeaders) {
|
|
content.copy(outBuffer, dindex);
|
|
dindex += content.length;
|
|
}
|
|
|
|
// write main header
|
|
const mh = mainHeader.toBinary();
|
|
if (_comment) {
|
|
_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
|
|
}
|
|
mh.copy(outBuffer, dindex);
|
|
|
|
return outBuffer;
|
|
},
|
|
|
|
toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {
|
|
try {
|
|
if (!loadedEntries) {
|
|
readEntries();
|
|
}
|
|
sortEntries();
|
|
|
|
const dataBlock = [];
|
|
const entryHeaders = [];
|
|
let totalSize = 0;
|
|
let dindex = 0;
|
|
|
|
mainHeader.size = 0;
|
|
mainHeader.offset = 0;
|
|
|
|
const compress2Buffer = function (entryLists) {
|
|
if (entryLists.length) {
|
|
const entry = entryLists.pop();
|
|
const name = entry.entryName + entry.extra.toString();
|
|
if (onItemStart) onItemStart(name);
|
|
entry.getCompressedDataAsync(function (compressedData) {
|
|
if (onItemEnd) onItemEnd(name);
|
|
|
|
entry.header.offset = dindex;
|
|
// data header
|
|
const dataHeader = entry.header.dataHeaderToBinary();
|
|
const postHeader = Buffer.alloc(name.length, name);
|
|
const dataLength = dataHeader.length + postHeader.length + compressedData.length;
|
|
|
|
dindex += dataLength;
|
|
|
|
dataBlock.push(dataHeader);
|
|
dataBlock.push(postHeader);
|
|
dataBlock.push(compressedData);
|
|
|
|
const entryHeader = entry.packHeader();
|
|
entryHeaders.push(entryHeader);
|
|
mainHeader.size += entryHeader.length;
|
|
totalSize += dataLength + entryHeader.length;
|
|
|
|
compress2Buffer(entryLists);
|
|
});
|
|
} else {
|
|
totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
|
|
// point to end of data and beginning of central directory first record
|
|
mainHeader.offset = dindex;
|
|
|
|
dindex = 0;
|
|
const outBuffer = Buffer.alloc(totalSize);
|
|
dataBlock.forEach(function (content) {
|
|
content.copy(outBuffer, dindex); // write data blocks
|
|
dindex += content.length;
|
|
});
|
|
entryHeaders.forEach(function (content) {
|
|
content.copy(outBuffer, dindex); // write central directory entries
|
|
dindex += content.length;
|
|
});
|
|
|
|
const mh = mainHeader.toBinary();
|
|
if (_comment) {
|
|
_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
|
|
}
|
|
|
|
mh.copy(outBuffer, dindex); // write main header
|
|
|
|
onSuccess(outBuffer);
|
|
}
|
|
};
|
|
|
|
compress2Buffer(entryList);
|
|
} catch (e) {
|
|
onFail(e);
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 610:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const stringify = __nccwpck_require__(8750);
|
|
const compile = __nccwpck_require__(9434);
|
|
const expand = __nccwpck_require__(5873);
|
|
const parse = __nccwpck_require__(6477);
|
|
|
|
/**
|
|
* Expand the given pattern or create a regex-compatible string.
|
|
*
|
|
* ```js
|
|
* const braces = require('braces');
|
|
* console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
|
|
* console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
|
|
* ```
|
|
* @param {String} `str`
|
|
* @param {Object} `options`
|
|
* @return {String}
|
|
* @api public
|
|
*/
|
|
|
|
const braces = (input, options = {}) => {
|
|
let output = [];
|
|
|
|
if (Array.isArray(input)) {
|
|
for (let pattern of input) {
|
|
let result = braces.create(pattern, options);
|
|
if (Array.isArray(result)) {
|
|
output.push(...result);
|
|
} else {
|
|
output.push(result);
|
|
}
|
|
}
|
|
} else {
|
|
output = [].concat(braces.create(input, options));
|
|
}
|
|
|
|
if (options && options.expand === true && options.nodupes === true) {
|
|
output = [...new Set(output)];
|
|
}
|
|
return output;
|
|
};
|
|
|
|
/**
|
|
* Parse the given `str` with the given `options`.
|
|
*
|
|
* ```js
|
|
* // braces.parse(pattern, [, options]);
|
|
* const ast = braces.parse('a/{b,c}/d');
|
|
* console.log(ast);
|
|
* ```
|
|
* @param {String} pattern Brace pattern to parse
|
|
* @param {Object} options
|
|
* @return {Object} Returns an AST
|
|
* @api public
|
|
*/
|
|
|
|
braces.parse = (input, options = {}) => parse(input, options);
|
|
|
|
/**
|
|
* Creates a braces string from an AST, or an AST node.
|
|
*
|
|
* ```js
|
|
* const braces = require('braces');
|
|
* let ast = braces.parse('foo/{a,b}/bar');
|
|
* console.log(stringify(ast.nodes[2])); //=> '{a,b}'
|
|
* ```
|
|
* @param {String} `input` Brace pattern or AST.
|
|
* @param {Object} `options`
|
|
* @return {Array} Returns an array of expanded values.
|
|
* @api public
|
|
*/
|
|
|
|
braces.stringify = (input, options = {}) => {
|
|
if (typeof input === 'string') {
|
|
return stringify(braces.parse(input, options), options);
|
|
}
|
|
return stringify(input, options);
|
|
};
|
|
|
|
/**
|
|
* Compiles a brace pattern into a regex-compatible, optimized string.
|
|
* This method is called by the main [braces](#braces) function by default.
|
|
*
|
|
* ```js
|
|
* const braces = require('braces');
|
|
* console.log(braces.compile('a/{b,c}/d'));
|
|
* //=> ['a/(b|c)/d']
|
|
* ```
|
|
* @param {String} `input` Brace pattern or AST.
|
|
* @param {Object} `options`
|
|
* @return {Array} Returns an array of expanded values.
|
|
* @api public
|
|
*/
|
|
|
|
braces.compile = (input, options = {}) => {
|
|
if (typeof input === 'string') {
|
|
input = braces.parse(input, options);
|
|
}
|
|
return compile(input, options);
|
|
};
|
|
|
|
/**
|
|
* Expands a brace pattern into an array. This method is called by the
|
|
* main [braces](#braces) function when `options.expand` is true. Before
|
|
* using this method it's recommended that you read the [performance notes](#performance))
|
|
* and advantages of using [.compile](#compile) instead.
|
|
*
|
|
* ```js
|
|
* const braces = require('braces');
|
|
* console.log(braces.expand('a/{b,c}/d'));
|
|
* //=> ['a/b/d', 'a/c/d'];
|
|
* ```
|
|
* @param {String} `pattern` Brace pattern
|
|
* @param {Object} `options`
|
|
* @return {Array} Returns an array of expanded values.
|
|
* @api public
|
|
*/
|
|
|
|
braces.expand = (input, options = {}) => {
|
|
if (typeof input === 'string') {
|
|
input = braces.parse(input, options);
|
|
}
|
|
|
|
let result = expand(input, options);
|
|
|
|
// filter out empty strings if specified
|
|
if (options.noempty === true) {
|
|
result = result.filter(Boolean);
|
|
}
|
|
|
|
// filter out duplicates if specified
|
|
if (options.nodupes === true) {
|
|
result = [...new Set(result)];
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* Processes a brace pattern and returns either an expanded array
|
|
* (if `options.expand` is true), a highly optimized regex-compatible string.
|
|
* This method is called by the main [braces](#braces) function.
|
|
*
|
|
* ```js
|
|
* const braces = require('braces');
|
|
* console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
|
|
* //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
|
|
* ```
|
|
* @param {String} `pattern` Brace pattern
|
|
* @param {Object} `options`
|
|
* @return {Array} Returns an array of expanded values.
|
|
* @api public
|
|
*/
|
|
|
|
braces.create = (input, options = {}) => {
|
|
if (input === '' || input.length < 3) {
|
|
return [input];
|
|
}
|
|
|
|
return options.expand !== true
|
|
? braces.compile(input, options)
|
|
: braces.expand(input, options);
|
|
};
|
|
|
|
/**
|
|
* Expose "braces"
|
|
*/
|
|
|
|
module.exports = braces;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9434:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const fill = __nccwpck_require__(6330);
|
|
const utils = __nccwpck_require__(5207);
|
|
|
|
const compile = (ast, options = {}) => {
|
|
let walk = (node, parent = {}) => {
|
|
let invalidBlock = utils.isInvalidBrace(parent);
|
|
let invalidNode = node.invalid === true && options.escapeInvalid === true;
|
|
let invalid = invalidBlock === true || invalidNode === true;
|
|
let prefix = options.escapeInvalid === true ? '\\' : '';
|
|
let output = '';
|
|
|
|
if (node.isOpen === true) {
|
|
return prefix + node.value;
|
|
}
|
|
if (node.isClose === true) {
|
|
return prefix + node.value;
|
|
}
|
|
|
|
if (node.type === 'open') {
|
|
return invalid ? (prefix + node.value) : '(';
|
|
}
|
|
|
|
if (node.type === 'close') {
|
|
return invalid ? (prefix + node.value) : ')';
|
|
}
|
|
|
|
if (node.type === 'comma') {
|
|
return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
|
|
}
|
|
|
|
if (node.value) {
|
|
return node.value;
|
|
}
|
|
|
|
if (node.nodes && node.ranges > 0) {
|
|
let args = utils.reduce(node.nodes);
|
|
let range = fill(...args, { ...options, wrap: false, toRegex: true });
|
|
|
|
if (range.length !== 0) {
|
|
return args.length > 1 && range.length > 1 ? `(${range})` : range;
|
|
}
|
|
}
|
|
|
|
if (node.nodes) {
|
|
for (let child of node.nodes) {
|
|
output += walk(child, node);
|
|
}
|
|
}
|
|
return output;
|
|
};
|
|
|
|
return walk(ast);
|
|
};
|
|
|
|
module.exports = compile;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8774:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = {
|
|
MAX_LENGTH: 1024 * 64,
|
|
|
|
// Digits
|
|
CHAR_0: '0', /* 0 */
|
|
CHAR_9: '9', /* 9 */
|
|
|
|
// Alphabet chars.
|
|
CHAR_UPPERCASE_A: 'A', /* A */
|
|
CHAR_LOWERCASE_A: 'a', /* a */
|
|
CHAR_UPPERCASE_Z: 'Z', /* Z */
|
|
CHAR_LOWERCASE_Z: 'z', /* z */
|
|
|
|
CHAR_LEFT_PARENTHESES: '(', /* ( */
|
|
CHAR_RIGHT_PARENTHESES: ')', /* ) */
|
|
|
|
CHAR_ASTERISK: '*', /* * */
|
|
|
|
// Non-alphabetic chars.
|
|
CHAR_AMPERSAND: '&', /* & */
|
|
CHAR_AT: '@', /* @ */
|
|
CHAR_BACKSLASH: '\\', /* \ */
|
|
CHAR_BACKTICK: '`', /* ` */
|
|
CHAR_CARRIAGE_RETURN: '\r', /* \r */
|
|
CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
|
|
CHAR_COLON: ':', /* : */
|
|
CHAR_COMMA: ',', /* , */
|
|
CHAR_DOLLAR: '$', /* . */
|
|
CHAR_DOT: '.', /* . */
|
|
CHAR_DOUBLE_QUOTE: '"', /* " */
|
|
CHAR_EQUAL: '=', /* = */
|
|
CHAR_EXCLAMATION_MARK: '!', /* ! */
|
|
CHAR_FORM_FEED: '\f', /* \f */
|
|
CHAR_FORWARD_SLASH: '/', /* / */
|
|
CHAR_HASH: '#', /* # */
|
|
CHAR_HYPHEN_MINUS: '-', /* - */
|
|
CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
|
|
CHAR_LEFT_CURLY_BRACE: '{', /* { */
|
|
CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
|
|
CHAR_LINE_FEED: '\n', /* \n */
|
|
CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
|
|
CHAR_PERCENT: '%', /* % */
|
|
CHAR_PLUS: '+', /* + */
|
|
CHAR_QUESTION_MARK: '?', /* ? */
|
|
CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
|
|
CHAR_RIGHT_CURLY_BRACE: '}', /* } */
|
|
CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
|
|
CHAR_SEMICOLON: ';', /* ; */
|
|
CHAR_SINGLE_QUOTE: '\'', /* ' */
|
|
CHAR_SPACE: ' ', /* */
|
|
CHAR_TAB: '\t', /* \t */
|
|
CHAR_UNDERSCORE: '_', /* _ */
|
|
CHAR_VERTICAL_LINE: '|', /* | */
|
|
CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5873:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const fill = __nccwpck_require__(6330);
|
|
const stringify = __nccwpck_require__(8750);
|
|
const utils = __nccwpck_require__(5207);
|
|
|
|
const append = (queue = '', stash = '', enclose = false) => {
|
|
let result = [];
|
|
|
|
queue = [].concat(queue);
|
|
stash = [].concat(stash);
|
|
|
|
if (!stash.length) return queue;
|
|
if (!queue.length) {
|
|
return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
|
|
}
|
|
|
|
for (let item of queue) {
|
|
if (Array.isArray(item)) {
|
|
for (let value of item) {
|
|
result.push(append(value, stash, enclose));
|
|
}
|
|
} else {
|
|
for (let ele of stash) {
|
|
if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
|
|
result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
|
|
}
|
|
}
|
|
}
|
|
return utils.flatten(result);
|
|
};
|
|
|
|
const expand = (ast, options = {}) => {
|
|
let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
|
|
|
|
let walk = (node, parent = {}) => {
|
|
node.queue = [];
|
|
|
|
let p = parent;
|
|
let q = parent.queue;
|
|
|
|
while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
|
|
p = p.parent;
|
|
q = p.queue;
|
|
}
|
|
|
|
if (node.invalid || node.dollar) {
|
|
q.push(append(q.pop(), stringify(node, options)));
|
|
return;
|
|
}
|
|
|
|
if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
|
|
q.push(append(q.pop(), ['{}']));
|
|
return;
|
|
}
|
|
|
|
if (node.nodes && node.ranges > 0) {
|
|
let args = utils.reduce(node.nodes);
|
|
|
|
if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
|
|
throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
|
|
}
|
|
|
|
let range = fill(...args, options);
|
|
if (range.length === 0) {
|
|
range = stringify(node, options);
|
|
}
|
|
|
|
q.push(append(q.pop(), range));
|
|
node.nodes = [];
|
|
return;
|
|
}
|
|
|
|
let enclose = utils.encloseBrace(node);
|
|
let queue = node.queue;
|
|
let block = node;
|
|
|
|
while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
|
|
block = block.parent;
|
|
queue = block.queue;
|
|
}
|
|
|
|
for (let i = 0; i < node.nodes.length; i++) {
|
|
let child = node.nodes[i];
|
|
|
|
if (child.type === 'comma' && node.type === 'brace') {
|
|
if (i === 1) queue.push('');
|
|
queue.push('');
|
|
continue;
|
|
}
|
|
|
|
if (child.type === 'close') {
|
|
q.push(append(q.pop(), queue, enclose));
|
|
continue;
|
|
}
|
|
|
|
if (child.value && child.type !== 'open') {
|
|
queue.push(append(queue.pop(), child.value));
|
|
continue;
|
|
}
|
|
|
|
if (child.nodes) {
|
|
walk(child, node);
|
|
}
|
|
}
|
|
|
|
return queue;
|
|
};
|
|
|
|
return utils.flatten(walk(ast));
|
|
};
|
|
|
|
module.exports = expand;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6477:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const stringify = __nccwpck_require__(8750);
|
|
|
|
/**
|
|
* Constants
|
|
*/
|
|
|
|
const {
|
|
MAX_LENGTH,
|
|
CHAR_BACKSLASH, /* \ */
|
|
CHAR_BACKTICK, /* ` */
|
|
CHAR_COMMA, /* , */
|
|
CHAR_DOT, /* . */
|
|
CHAR_LEFT_PARENTHESES, /* ( */
|
|
CHAR_RIGHT_PARENTHESES, /* ) */
|
|
CHAR_LEFT_CURLY_BRACE, /* { */
|
|
CHAR_RIGHT_CURLY_BRACE, /* } */
|
|
CHAR_LEFT_SQUARE_BRACKET, /* [ */
|
|
CHAR_RIGHT_SQUARE_BRACKET, /* ] */
|
|
CHAR_DOUBLE_QUOTE, /* " */
|
|
CHAR_SINGLE_QUOTE, /* ' */
|
|
CHAR_NO_BREAK_SPACE,
|
|
CHAR_ZERO_WIDTH_NOBREAK_SPACE
|
|
} = __nccwpck_require__(8774);
|
|
|
|
/**
|
|
* parse
|
|
*/
|
|
|
|
const parse = (input, options = {}) => {
|
|
if (typeof input !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
let opts = options || {};
|
|
let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
|
|
if (input.length > max) {
|
|
throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
|
|
}
|
|
|
|
let ast = { type: 'root', input, nodes: [] };
|
|
let stack = [ast];
|
|
let block = ast;
|
|
let prev = ast;
|
|
let brackets = 0;
|
|
let length = input.length;
|
|
let index = 0;
|
|
let depth = 0;
|
|
let value;
|
|
let memo = {};
|
|
|
|
/**
|
|
* Helpers
|
|
*/
|
|
|
|
const advance = () => input[index++];
|
|
const push = node => {
|
|
if (node.type === 'text' && prev.type === 'dot') {
|
|
prev.type = 'text';
|
|
}
|
|
|
|
if (prev && prev.type === 'text' && node.type === 'text') {
|
|
prev.value += node.value;
|
|
return;
|
|
}
|
|
|
|
block.nodes.push(node);
|
|
node.parent = block;
|
|
node.prev = prev;
|
|
prev = node;
|
|
return node;
|
|
};
|
|
|
|
push({ type: 'bos' });
|
|
|
|
while (index < length) {
|
|
block = stack[stack.length - 1];
|
|
value = advance();
|
|
|
|
/**
|
|
* Invalid chars
|
|
*/
|
|
|
|
if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Escaped chars
|
|
*/
|
|
|
|
if (value === CHAR_BACKSLASH) {
|
|
push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Right square bracket (literal): ']'
|
|
*/
|
|
|
|
if (value === CHAR_RIGHT_SQUARE_BRACKET) {
|
|
push({ type: 'text', value: '\\' + value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Left square bracket: '['
|
|
*/
|
|
|
|
if (value === CHAR_LEFT_SQUARE_BRACKET) {
|
|
brackets++;
|
|
|
|
let closed = true;
|
|
let next;
|
|
|
|
while (index < length && (next = advance())) {
|
|
value += next;
|
|
|
|
if (next === CHAR_LEFT_SQUARE_BRACKET) {
|
|
brackets++;
|
|
continue;
|
|
}
|
|
|
|
if (next === CHAR_BACKSLASH) {
|
|
value += advance();
|
|
continue;
|
|
}
|
|
|
|
if (next === CHAR_RIGHT_SQUARE_BRACKET) {
|
|
brackets--;
|
|
|
|
if (brackets === 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Parentheses
|
|
*/
|
|
|
|
if (value === CHAR_LEFT_PARENTHESES) {
|
|
block = push({ type: 'paren', nodes: [] });
|
|
stack.push(block);
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
if (value === CHAR_RIGHT_PARENTHESES) {
|
|
if (block.type !== 'paren') {
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
block = stack.pop();
|
|
push({ type: 'text', value });
|
|
block = stack[stack.length - 1];
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Quotes: '|"|`
|
|
*/
|
|
|
|
if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
|
|
let open = value;
|
|
let next;
|
|
|
|
if (options.keepQuotes !== true) {
|
|
value = '';
|
|
}
|
|
|
|
while (index < length && (next = advance())) {
|
|
if (next === CHAR_BACKSLASH) {
|
|
value += next + advance();
|
|
continue;
|
|
}
|
|
|
|
if (next === open) {
|
|
if (options.keepQuotes === true) value += next;
|
|
break;
|
|
}
|
|
|
|
value += next;
|
|
}
|
|
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Left curly brace: '{'
|
|
*/
|
|
|
|
if (value === CHAR_LEFT_CURLY_BRACE) {
|
|
depth++;
|
|
|
|
let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
|
|
let brace = {
|
|
type: 'brace',
|
|
open: true,
|
|
close: false,
|
|
dollar,
|
|
depth,
|
|
commas: 0,
|
|
ranges: 0,
|
|
nodes: []
|
|
};
|
|
|
|
block = push(brace);
|
|
stack.push(block);
|
|
push({ type: 'open', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Right curly brace: '}'
|
|
*/
|
|
|
|
if (value === CHAR_RIGHT_CURLY_BRACE) {
|
|
if (block.type !== 'brace') {
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
let type = 'close';
|
|
block = stack.pop();
|
|
block.close = true;
|
|
|
|
push({ type, value });
|
|
depth--;
|
|
|
|
block = stack[stack.length - 1];
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Comma: ','
|
|
*/
|
|
|
|
if (value === CHAR_COMMA && depth > 0) {
|
|
if (block.ranges > 0) {
|
|
block.ranges = 0;
|
|
let open = block.nodes.shift();
|
|
block.nodes = [open, { type: 'text', value: stringify(block) }];
|
|
}
|
|
|
|
push({ type: 'comma', value });
|
|
block.commas++;
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Dot: '.'
|
|
*/
|
|
|
|
if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
|
|
let siblings = block.nodes;
|
|
|
|
if (depth === 0 || siblings.length === 0) {
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
if (prev.type === 'dot') {
|
|
block.range = [];
|
|
prev.value += value;
|
|
prev.type = 'range';
|
|
|
|
if (block.nodes.length !== 3 && block.nodes.length !== 5) {
|
|
block.invalid = true;
|
|
block.ranges = 0;
|
|
prev.type = 'text';
|
|
continue;
|
|
}
|
|
|
|
block.ranges++;
|
|
block.args = [];
|
|
continue;
|
|
}
|
|
|
|
if (prev.type === 'range') {
|
|
siblings.pop();
|
|
|
|
let before = siblings[siblings.length - 1];
|
|
before.value += prev.value + value;
|
|
prev = before;
|
|
block.ranges--;
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'dot', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Text
|
|
*/
|
|
|
|
push({ type: 'text', value });
|
|
}
|
|
|
|
// Mark imbalanced braces and brackets as invalid
|
|
do {
|
|
block = stack.pop();
|
|
|
|
if (block.type !== 'root') {
|
|
block.nodes.forEach(node => {
|
|
if (!node.nodes) {
|
|
if (node.type === 'open') node.isOpen = true;
|
|
if (node.type === 'close') node.isClose = true;
|
|
if (!node.nodes) node.type = 'text';
|
|
node.invalid = true;
|
|
}
|
|
});
|
|
|
|
// get the location of the block on parent.nodes (block's siblings)
|
|
let parent = stack[stack.length - 1];
|
|
let index = parent.nodes.indexOf(block);
|
|
// replace the (invalid) block with it's nodes
|
|
parent.nodes.splice(index, 1, ...block.nodes);
|
|
}
|
|
} while (stack.length > 0);
|
|
|
|
push({ type: 'eos' });
|
|
return ast;
|
|
};
|
|
|
|
module.exports = parse;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8750:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const utils = __nccwpck_require__(5207);
|
|
|
|
module.exports = (ast, options = {}) => {
|
|
let stringify = (node, parent = {}) => {
|
|
let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
|
|
let invalidNode = node.invalid === true && options.escapeInvalid === true;
|
|
let output = '';
|
|
|
|
if (node.value) {
|
|
if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
|
|
return '\\' + node.value;
|
|
}
|
|
return node.value;
|
|
}
|
|
|
|
if (node.value) {
|
|
return node.value;
|
|
}
|
|
|
|
if (node.nodes) {
|
|
for (let child of node.nodes) {
|
|
output += stringify(child);
|
|
}
|
|
}
|
|
return output;
|
|
};
|
|
|
|
return stringify(ast);
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5207:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
exports.isInteger = num => {
|
|
if (typeof num === 'number') {
|
|
return Number.isInteger(num);
|
|
}
|
|
if (typeof num === 'string' && num.trim() !== '') {
|
|
return Number.isInteger(Number(num));
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Find a node of the given type
|
|
*/
|
|
|
|
exports.find = (node, type) => node.nodes.find(node => node.type === type);
|
|
|
|
/**
|
|
* Find a node of the given type
|
|
*/
|
|
|
|
exports.exceedsLimit = (min, max, step = 1, limit) => {
|
|
if (limit === false) return false;
|
|
if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
|
|
return ((Number(max) - Number(min)) / Number(step)) >= limit;
|
|
};
|
|
|
|
/**
|
|
* Escape the given node with '\\' before node.value
|
|
*/
|
|
|
|
exports.escapeNode = (block, n = 0, type) => {
|
|
let node = block.nodes[n];
|
|
if (!node) return;
|
|
|
|
if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
|
|
if (node.escaped !== true) {
|
|
node.value = '\\' + node.value;
|
|
node.escaped = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns true if the given brace node should be enclosed in literal braces
|
|
*/
|
|
|
|
exports.encloseBrace = node => {
|
|
if (node.type !== 'brace') return false;
|
|
if ((node.commas >> 0 + node.ranges >> 0) === 0) {
|
|
node.invalid = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Returns true if a brace node is invalid.
|
|
*/
|
|
|
|
exports.isInvalidBrace = block => {
|
|
if (block.type !== 'brace') return false;
|
|
if (block.invalid === true || block.dollar) return true;
|
|
if ((block.commas >> 0 + block.ranges >> 0) === 0) {
|
|
block.invalid = true;
|
|
return true;
|
|
}
|
|
if (block.open !== true || block.close !== true) {
|
|
block.invalid = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Returns true if a node is an open or close node
|
|
*/
|
|
|
|
exports.isOpenOrClose = node => {
|
|
if (node.type === 'open' || node.type === 'close') {
|
|
return true;
|
|
}
|
|
return node.open === true || node.close === true;
|
|
};
|
|
|
|
/**
|
|
* Reduce an array of text nodes.
|
|
*/
|
|
|
|
exports.reduce = nodes => nodes.reduce((acc, node) => {
|
|
if (node.type === 'text') acc.push(node.value);
|
|
if (node.type === 'range') node.type = 'text';
|
|
return acc;
|
|
}, []);
|
|
|
|
/**
|
|
* Flatten an array
|
|
*/
|
|
|
|
exports.flatten = (...args) => {
|
|
const result = [];
|
|
const flat = arr => {
|
|
for (let i = 0; i < arr.length; i++) {
|
|
let ele = arr[i];
|
|
Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
|
|
}
|
|
return result;
|
|
};
|
|
flat(args);
|
|
return result;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2286:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
V4MAPPED,
|
|
ADDRCONFIG,
|
|
ALL,
|
|
promises: {
|
|
Resolver: AsyncResolver
|
|
},
|
|
lookup: dnsLookup
|
|
} = __nccwpck_require__(9523);
|
|
const {promisify} = __nccwpck_require__(3837);
|
|
const os = __nccwpck_require__(2037);
|
|
|
|
const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
|
|
const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
|
|
const kExpires = Symbol('expires');
|
|
|
|
const supportsALL = typeof ALL === 'number';
|
|
|
|
const verifyAgent = agent => {
|
|
if (!(agent && typeof agent.createConnection === 'function')) {
|
|
throw new Error('Expected an Agent instance as the first argument');
|
|
}
|
|
};
|
|
|
|
const map4to6 = entries => {
|
|
for (const entry of entries) {
|
|
if (entry.family === 6) {
|
|
continue;
|
|
}
|
|
|
|
entry.address = `::ffff:${entry.address}`;
|
|
entry.family = 6;
|
|
}
|
|
};
|
|
|
|
const getIfaceInfo = () => {
|
|
let has4 = false;
|
|
let has6 = false;
|
|
|
|
for (const device of Object.values(os.networkInterfaces())) {
|
|
for (const iface of device) {
|
|
if (iface.internal) {
|
|
continue;
|
|
}
|
|
|
|
if (iface.family === 'IPv6') {
|
|
has6 = true;
|
|
} else {
|
|
has4 = true;
|
|
}
|
|
|
|
if (has4 && has6) {
|
|
return {has4, has6};
|
|
}
|
|
}
|
|
}
|
|
|
|
return {has4, has6};
|
|
};
|
|
|
|
const isIterable = map => {
|
|
return Symbol.iterator in map;
|
|
};
|
|
|
|
const ignoreNoResultErrors = dnsPromise => {
|
|
return dnsPromise.catch(error => {
|
|
if (
|
|
error.code === 'ENODATA' ||
|
|
error.code === 'ENOTFOUND' ||
|
|
error.code === 'ENOENT' // Windows: name exists, but not this record type
|
|
) {
|
|
return [];
|
|
}
|
|
|
|
throw error;
|
|
});
|
|
};
|
|
|
|
const ttl = {ttl: true};
|
|
const all = {all: true};
|
|
const all4 = {all: true, family: 4};
|
|
const all6 = {all: true, family: 6};
|
|
|
|
class CacheableLookup {
|
|
constructor({
|
|
cache = new Map(),
|
|
maxTtl = Infinity,
|
|
fallbackDuration = 3600,
|
|
errorTtl = 0.15,
|
|
resolver = new AsyncResolver(),
|
|
lookup = dnsLookup
|
|
} = {}) {
|
|
this.maxTtl = maxTtl;
|
|
this.errorTtl = errorTtl;
|
|
|
|
this._cache = cache;
|
|
this._resolver = resolver;
|
|
this._dnsLookup = lookup && promisify(lookup);
|
|
|
|
if (this._resolver instanceof AsyncResolver) {
|
|
this._resolve4 = this._resolver.resolve4.bind(this._resolver);
|
|
this._resolve6 = this._resolver.resolve6.bind(this._resolver);
|
|
} else {
|
|
this._resolve4 = promisify(this._resolver.resolve4.bind(this._resolver));
|
|
this._resolve6 = promisify(this._resolver.resolve6.bind(this._resolver));
|
|
}
|
|
|
|
this._iface = getIfaceInfo();
|
|
|
|
this._pending = {};
|
|
this._nextRemovalTime = false;
|
|
this._hostnamesToFallback = new Set();
|
|
|
|
this.fallbackDuration = fallbackDuration;
|
|
|
|
if (fallbackDuration > 0) {
|
|
const interval = setInterval(() => {
|
|
this._hostnamesToFallback.clear();
|
|
}, fallbackDuration * 1000);
|
|
|
|
/* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */
|
|
if (interval.unref) {
|
|
interval.unref();
|
|
}
|
|
|
|
this._fallbackInterval = interval;
|
|
}
|
|
|
|
this.lookup = this.lookup.bind(this);
|
|
this.lookupAsync = this.lookupAsync.bind(this);
|
|
}
|
|
|
|
set servers(servers) {
|
|
this.clear();
|
|
|
|
this._resolver.setServers(servers);
|
|
}
|
|
|
|
get servers() {
|
|
return this._resolver.getServers();
|
|
}
|
|
|
|
lookup(hostname, options, callback) {
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = {};
|
|
} else if (typeof options === 'number') {
|
|
options = {
|
|
family: options
|
|
};
|
|
}
|
|
|
|
if (!callback) {
|
|
throw new Error('Callback must be a function.');
|
|
}
|
|
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
this.lookupAsync(hostname, options).then(result => {
|
|
if (options.all) {
|
|
callback(null, result);
|
|
} else {
|
|
callback(null, result.address, result.family, result.expires, result.ttl, result.source);
|
|
}
|
|
}, callback);
|
|
}
|
|
|
|
async lookupAsync(hostname, options = {}) {
|
|
if (typeof options === 'number') {
|
|
options = {
|
|
family: options
|
|
};
|
|
}
|
|
|
|
let cached = await this.query(hostname);
|
|
|
|
if (options.family === 6) {
|
|
const filtered = cached.filter(entry => entry.family === 6);
|
|
|
|
if (options.hints & V4MAPPED) {
|
|
if ((supportsALL && options.hints & ALL) || filtered.length === 0) {
|
|
map4to6(cached);
|
|
} else {
|
|
cached = filtered;
|
|
}
|
|
} else {
|
|
cached = filtered;
|
|
}
|
|
} else if (options.family === 4) {
|
|
cached = cached.filter(entry => entry.family === 4);
|
|
}
|
|
|
|
if (options.hints & ADDRCONFIG) {
|
|
const {_iface} = this;
|
|
cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);
|
|
}
|
|
|
|
if (cached.length === 0) {
|
|
const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);
|
|
error.code = 'ENOTFOUND';
|
|
error.hostname = hostname;
|
|
|
|
throw error;
|
|
}
|
|
|
|
if (options.all) {
|
|
return cached;
|
|
}
|
|
|
|
return cached[0];
|
|
}
|
|
|
|
async query(hostname) {
|
|
let source = 'cache';
|
|
let cached = await this._cache.get(hostname);
|
|
|
|
if (!cached) {
|
|
const pending = this._pending[hostname];
|
|
|
|
if (pending) {
|
|
cached = await pending;
|
|
} else {
|
|
source = 'query';
|
|
const newPromise = this.queryAndCache(hostname);
|
|
this._pending[hostname] = newPromise;
|
|
|
|
try {
|
|
cached = await newPromise;
|
|
} finally {
|
|
delete this._pending[hostname];
|
|
}
|
|
}
|
|
}
|
|
|
|
cached = cached.map(entry => {
|
|
return {...entry, source};
|
|
});
|
|
|
|
return cached;
|
|
}
|
|
|
|
async _resolve(hostname) {
|
|
// ANY is unsafe as it doesn't trigger new queries in the underlying server.
|
|
const [A, AAAA] = await Promise.all([
|
|
ignoreNoResultErrors(this._resolve4(hostname, ttl)),
|
|
ignoreNoResultErrors(this._resolve6(hostname, ttl))
|
|
]);
|
|
|
|
let aTtl = 0;
|
|
let aaaaTtl = 0;
|
|
let cacheTtl = 0;
|
|
|
|
const now = Date.now();
|
|
|
|
for (const entry of A) {
|
|
entry.family = 4;
|
|
entry.expires = now + (entry.ttl * 1000);
|
|
|
|
aTtl = Math.max(aTtl, entry.ttl);
|
|
}
|
|
|
|
for (const entry of AAAA) {
|
|
entry.family = 6;
|
|
entry.expires = now + (entry.ttl * 1000);
|
|
|
|
aaaaTtl = Math.max(aaaaTtl, entry.ttl);
|
|
}
|
|
|
|
if (A.length > 0) {
|
|
if (AAAA.length > 0) {
|
|
cacheTtl = Math.min(aTtl, aaaaTtl);
|
|
} else {
|
|
cacheTtl = aTtl;
|
|
}
|
|
} else {
|
|
cacheTtl = aaaaTtl;
|
|
}
|
|
|
|
return {
|
|
entries: [
|
|
...A,
|
|
...AAAA
|
|
],
|
|
cacheTtl
|
|
};
|
|
}
|
|
|
|
async _lookup(hostname) {
|
|
try {
|
|
const [A, AAAA] = await Promise.all([
|
|
// Passing {all: true} doesn't return all IPv4 and IPv6 entries.
|
|
// See https://github.com/szmarczak/cacheable-lookup/issues/42
|
|
ignoreNoResultErrors(this._dnsLookup(hostname, all4)),
|
|
ignoreNoResultErrors(this._dnsLookup(hostname, all6))
|
|
]);
|
|
|
|
return {
|
|
entries: [
|
|
...A,
|
|
...AAAA
|
|
],
|
|
cacheTtl: 0
|
|
};
|
|
} catch {
|
|
return {
|
|
entries: [],
|
|
cacheTtl: 0
|
|
};
|
|
}
|
|
}
|
|
|
|
async _set(hostname, data, cacheTtl) {
|
|
if (this.maxTtl > 0 && cacheTtl > 0) {
|
|
cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;
|
|
data[kExpires] = Date.now() + cacheTtl;
|
|
|
|
try {
|
|
await this._cache.set(hostname, data, cacheTtl);
|
|
} catch (error) {
|
|
this.lookupAsync = async () => {
|
|
const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');
|
|
cacheError.cause = error;
|
|
|
|
throw cacheError;
|
|
};
|
|
}
|
|
|
|
if (isIterable(this._cache)) {
|
|
this._tick(cacheTtl);
|
|
}
|
|
}
|
|
}
|
|
|
|
async queryAndCache(hostname) {
|
|
if (this._hostnamesToFallback.has(hostname)) {
|
|
return this._dnsLookup(hostname, all);
|
|
}
|
|
|
|
let query = await this._resolve(hostname);
|
|
|
|
if (query.entries.length === 0 && this._dnsLookup) {
|
|
query = await this._lookup(hostname);
|
|
|
|
if (query.entries.length !== 0 && this.fallbackDuration > 0) {
|
|
// Use `dns.lookup(...)` for that particular hostname
|
|
this._hostnamesToFallback.add(hostname);
|
|
}
|
|
}
|
|
|
|
const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;
|
|
await this._set(hostname, query.entries, cacheTtl);
|
|
|
|
return query.entries;
|
|
}
|
|
|
|
_tick(ms) {
|
|
const nextRemovalTime = this._nextRemovalTime;
|
|
|
|
if (!nextRemovalTime || ms < nextRemovalTime) {
|
|
clearTimeout(this._removalTimeout);
|
|
|
|
this._nextRemovalTime = ms;
|
|
|
|
this._removalTimeout = setTimeout(() => {
|
|
this._nextRemovalTime = false;
|
|
|
|
let nextExpiry = Infinity;
|
|
|
|
const now = Date.now();
|
|
|
|
for (const [hostname, entries] of this._cache) {
|
|
const expires = entries[kExpires];
|
|
|
|
if (now >= expires) {
|
|
this._cache.delete(hostname);
|
|
} else if (expires < nextExpiry) {
|
|
nextExpiry = expires;
|
|
}
|
|
}
|
|
|
|
if (nextExpiry !== Infinity) {
|
|
this._tick(nextExpiry - now);
|
|
}
|
|
}, ms);
|
|
|
|
/* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */
|
|
if (this._removalTimeout.unref) {
|
|
this._removalTimeout.unref();
|
|
}
|
|
}
|
|
}
|
|
|
|
install(agent) {
|
|
verifyAgent(agent);
|
|
|
|
if (kCacheableLookupCreateConnection in agent) {
|
|
throw new Error('CacheableLookup has been already installed');
|
|
}
|
|
|
|
agent[kCacheableLookupCreateConnection] = agent.createConnection;
|
|
agent[kCacheableLookupInstance] = this;
|
|
|
|
agent.createConnection = (options, callback) => {
|
|
if (!('lookup' in options)) {
|
|
options.lookup = this.lookup;
|
|
}
|
|
|
|
return agent[kCacheableLookupCreateConnection](options, callback);
|
|
};
|
|
}
|
|
|
|
uninstall(agent) {
|
|
verifyAgent(agent);
|
|
|
|
if (agent[kCacheableLookupCreateConnection]) {
|
|
if (agent[kCacheableLookupInstance] !== this) {
|
|
throw new Error('The agent is not owned by this CacheableLookup instance');
|
|
}
|
|
|
|
agent.createConnection = agent[kCacheableLookupCreateConnection];
|
|
|
|
delete agent[kCacheableLookupCreateConnection];
|
|
delete agent[kCacheableLookupInstance];
|
|
}
|
|
}
|
|
|
|
updateInterfaceInfo() {
|
|
const {_iface} = this;
|
|
|
|
this._iface = getIfaceInfo();
|
|
|
|
if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {
|
|
this._cache.clear();
|
|
}
|
|
}
|
|
|
|
clear(hostname) {
|
|
if (hostname) {
|
|
this._cache.delete(hostname);
|
|
return;
|
|
}
|
|
|
|
this._cache.clear();
|
|
}
|
|
}
|
|
|
|
module.exports = CacheableLookup;
|
|
module.exports["default"] = CacheableLookup;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4340:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
|
|
|
|
module.exports = options => {
|
|
options = {...options};
|
|
|
|
const {array} = options;
|
|
let {encoding} = options;
|
|
const isBuffer = encoding === 'buffer';
|
|
let objectMode = false;
|
|
|
|
if (array) {
|
|
objectMode = !(encoding || isBuffer);
|
|
} else {
|
|
encoding = encoding || 'utf8';
|
|
}
|
|
|
|
if (isBuffer) {
|
|
encoding = null;
|
|
}
|
|
|
|
const stream = new PassThroughStream({objectMode});
|
|
|
|
if (encoding) {
|
|
stream.setEncoding(encoding);
|
|
}
|
|
|
|
let length = 0;
|
|
const chunks = [];
|
|
|
|
stream.on('data', chunk => {
|
|
chunks.push(chunk);
|
|
|
|
if (objectMode) {
|
|
length = chunks.length;
|
|
} else {
|
|
length += chunk.length;
|
|
}
|
|
});
|
|
|
|
stream.getBufferedValue = () => {
|
|
if (array) {
|
|
return chunks;
|
|
}
|
|
|
|
return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
|
|
};
|
|
|
|
stream.getBufferedLength = () => length;
|
|
|
|
return stream;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7040:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {constants: BufferConstants} = __nccwpck_require__(4300);
|
|
const pump = __nccwpck_require__(8341);
|
|
const bufferStream = __nccwpck_require__(4340);
|
|
|
|
class MaxBufferError extends Error {
|
|
constructor() {
|
|
super('maxBuffer exceeded');
|
|
this.name = 'MaxBufferError';
|
|
}
|
|
}
|
|
|
|
async function getStream(inputStream, options) {
|
|
if (!inputStream) {
|
|
return Promise.reject(new Error('Expected a stream'));
|
|
}
|
|
|
|
options = {
|
|
maxBuffer: Infinity,
|
|
...options
|
|
};
|
|
|
|
const {maxBuffer} = options;
|
|
|
|
let stream;
|
|
await new Promise((resolve, reject) => {
|
|
const rejectPromise = error => {
|
|
// Don't retrieve an oversized buffer.
|
|
if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
|
|
error.bufferedData = stream.getBufferedValue();
|
|
}
|
|
|
|
reject(error);
|
|
};
|
|
|
|
stream = pump(inputStream, bufferStream(options), error => {
|
|
if (error) {
|
|
rejectPromise(error);
|
|
return;
|
|
}
|
|
|
|
resolve();
|
|
});
|
|
|
|
stream.on('data', () => {
|
|
if (stream.getBufferedLength() > maxBuffer) {
|
|
rejectPromise(new MaxBufferError());
|
|
}
|
|
});
|
|
});
|
|
|
|
return stream.getBufferedValue();
|
|
}
|
|
|
|
module.exports = getStream;
|
|
// TODO: Remove this for the next major release
|
|
module.exports["default"] = getStream;
|
|
module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
|
|
module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
|
|
module.exports.MaxBufferError = MaxBufferError;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5993:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
module.exports = object => {
|
|
const result = {};
|
|
|
|
for (const [key, value] of Object.entries(object)) {
|
|
result[key.toLowerCase()] = value;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8116:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const EventEmitter = __nccwpck_require__(2361);
|
|
const urlLib = __nccwpck_require__(7310);
|
|
const normalizeUrl = __nccwpck_require__(7952);
|
|
const getStream = __nccwpck_require__(7040);
|
|
const CachePolicy = __nccwpck_require__(1002);
|
|
const Response = __nccwpck_require__(9004);
|
|
const lowercaseKeys = __nccwpck_require__(5993);
|
|
const cloneResponse = __nccwpck_require__(1312);
|
|
const Keyv = __nccwpck_require__(1531);
|
|
|
|
class CacheableRequest {
|
|
constructor(request, cacheAdapter) {
|
|
if (typeof request !== 'function') {
|
|
throw new TypeError('Parameter `request` must be a function');
|
|
}
|
|
|
|
this.cache = new Keyv({
|
|
uri: typeof cacheAdapter === 'string' && cacheAdapter,
|
|
store: typeof cacheAdapter !== 'string' && cacheAdapter,
|
|
namespace: 'cacheable-request'
|
|
});
|
|
|
|
return this.createCacheableRequest(request);
|
|
}
|
|
|
|
createCacheableRequest(request) {
|
|
return (opts, cb) => {
|
|
let url;
|
|
if (typeof opts === 'string') {
|
|
url = normalizeUrlObject(urlLib.parse(opts));
|
|
opts = {};
|
|
} else if (opts instanceof urlLib.URL) {
|
|
url = normalizeUrlObject(urlLib.parse(opts.toString()));
|
|
opts = {};
|
|
} else {
|
|
const [pathname, ...searchParts] = (opts.path || '').split('?');
|
|
const search = searchParts.length > 0 ?
|
|
`?${searchParts.join('?')}` :
|
|
'';
|
|
url = normalizeUrlObject({ ...opts, pathname, search });
|
|
}
|
|
|
|
opts = {
|
|
headers: {},
|
|
method: 'GET',
|
|
cache: true,
|
|
strictTtl: false,
|
|
automaticFailover: false,
|
|
...opts,
|
|
...urlObjectToRequestOptions(url)
|
|
};
|
|
opts.headers = lowercaseKeys(opts.headers);
|
|
|
|
const ee = new EventEmitter();
|
|
const normalizedUrlString = normalizeUrl(
|
|
urlLib.format(url),
|
|
{
|
|
stripWWW: false,
|
|
removeTrailingSlash: false,
|
|
stripAuthentication: false
|
|
}
|
|
);
|
|
const key = `${opts.method}:${normalizedUrlString}`;
|
|
let revalidate = false;
|
|
let madeRequest = false;
|
|
|
|
const makeRequest = opts => {
|
|
madeRequest = true;
|
|
let requestErrored = false;
|
|
let requestErrorCallback;
|
|
|
|
const requestErrorPromise = new Promise(resolve => {
|
|
requestErrorCallback = () => {
|
|
if (!requestErrored) {
|
|
requestErrored = true;
|
|
resolve();
|
|
}
|
|
};
|
|
});
|
|
|
|
const handler = response => {
|
|
if (revalidate && !opts.forceRefresh) {
|
|
response.status = response.statusCode;
|
|
const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response);
|
|
if (!revalidatedPolicy.modified) {
|
|
const headers = revalidatedPolicy.policy.responseHeaders();
|
|
response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url);
|
|
response.cachePolicy = revalidatedPolicy.policy;
|
|
response.fromCache = true;
|
|
}
|
|
}
|
|
|
|
if (!response.fromCache) {
|
|
response.cachePolicy = new CachePolicy(opts, response, opts);
|
|
response.fromCache = false;
|
|
}
|
|
|
|
let clonedResponse;
|
|
if (opts.cache && response.cachePolicy.storable()) {
|
|
clonedResponse = cloneResponse(response);
|
|
|
|
(async () => {
|
|
try {
|
|
const bodyPromise = getStream.buffer(response);
|
|
|
|
await Promise.race([
|
|
requestErrorPromise,
|
|
new Promise(resolve => response.once('end', resolve))
|
|
]);
|
|
|
|
if (requestErrored) {
|
|
return;
|
|
}
|
|
|
|
const body = await bodyPromise;
|
|
|
|
const value = {
|
|
cachePolicy: response.cachePolicy.toObject(),
|
|
url: response.url,
|
|
statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
|
|
body
|
|
};
|
|
|
|
let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined;
|
|
if (opts.maxTtl) {
|
|
ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl;
|
|
}
|
|
|
|
await this.cache.set(key, value, ttl);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
} else if (opts.cache && revalidate) {
|
|
(async () => {
|
|
try {
|
|
await this.cache.delete(key);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
}
|
|
|
|
ee.emit('response', clonedResponse || response);
|
|
if (typeof cb === 'function') {
|
|
cb(clonedResponse || response);
|
|
}
|
|
};
|
|
|
|
try {
|
|
const req = request(opts, handler);
|
|
req.once('error', requestErrorCallback);
|
|
req.once('abort', requestErrorCallback);
|
|
ee.emit('request', req);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.RequestError(error));
|
|
}
|
|
};
|
|
|
|
(async () => {
|
|
const get = async opts => {
|
|
await Promise.resolve();
|
|
|
|
const cacheEntry = opts.cache ? await this.cache.get(key) : undefined;
|
|
if (typeof cacheEntry === 'undefined') {
|
|
return makeRequest(opts);
|
|
}
|
|
|
|
const policy = CachePolicy.fromObject(cacheEntry.cachePolicy);
|
|
if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) {
|
|
const headers = policy.responseHeaders();
|
|
const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url);
|
|
response.cachePolicy = policy;
|
|
response.fromCache = true;
|
|
|
|
ee.emit('response', response);
|
|
if (typeof cb === 'function') {
|
|
cb(response);
|
|
}
|
|
} else {
|
|
revalidate = cacheEntry;
|
|
opts.headers = policy.revalidationHeaders(opts);
|
|
makeRequest(opts);
|
|
}
|
|
};
|
|
|
|
const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error));
|
|
this.cache.once('error', errorHandler);
|
|
ee.on('response', () => this.cache.removeListener('error', errorHandler));
|
|
|
|
try {
|
|
await get(opts);
|
|
} catch (error) {
|
|
if (opts.automaticFailover && !madeRequest) {
|
|
makeRequest(opts);
|
|
}
|
|
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
|
|
return ee;
|
|
};
|
|
}
|
|
}
|
|
|
|
function urlObjectToRequestOptions(url) {
|
|
const options = { ...url };
|
|
options.path = `${url.pathname || '/'}${url.search || ''}`;
|
|
delete options.pathname;
|
|
delete options.search;
|
|
return options;
|
|
}
|
|
|
|
function normalizeUrlObject(url) {
|
|
// If url was parsed by url.parse or new URL:
|
|
// - hostname will be set
|
|
// - host will be hostname[:port]
|
|
// - port will be set if it was explicit in the parsed string
|
|
// Otherwise, url was from request options:
|
|
// - hostname or host may be set
|
|
// - host shall not have port encoded
|
|
return {
|
|
protocol: url.protocol,
|
|
auth: url.auth,
|
|
hostname: url.hostname || url.host || 'localhost',
|
|
port: url.port,
|
|
pathname: url.pathname,
|
|
search: url.search
|
|
};
|
|
}
|
|
|
|
CacheableRequest.RequestError = class extends Error {
|
|
constructor(error) {
|
|
super(error.message);
|
|
this.name = 'RequestError';
|
|
Object.assign(this, error);
|
|
}
|
|
};
|
|
|
|
CacheableRequest.CacheError = class extends Error {
|
|
constructor(error) {
|
|
super(error.message);
|
|
this.name = 'CacheError';
|
|
Object.assign(this, error);
|
|
}
|
|
};
|
|
|
|
module.exports = CacheableRequest;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1312:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const PassThrough = (__nccwpck_require__(2781).PassThrough);
|
|
const mimicResponse = __nccwpck_require__(2610);
|
|
|
|
const cloneResponse = response => {
|
|
if (!(response && response.pipe)) {
|
|
throw new TypeError('Parameter `response` must be a response stream.');
|
|
}
|
|
|
|
const clone = new PassThrough();
|
|
mimicResponse(response, clone);
|
|
|
|
return response.pipe(clone);
|
|
};
|
|
|
|
module.exports = cloneResponse;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5728:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const { promisify } = __nccwpck_require__(3837)
|
|
const JSONB = __nccwpck_require__(2820)
|
|
const zlib = __nccwpck_require__(9796)
|
|
|
|
const mergeOptions = __nccwpck_require__(4968)
|
|
|
|
const compress = promisify(zlib.brotliCompress)
|
|
|
|
const decompress = promisify(zlib.brotliDecompress)
|
|
|
|
const identity = val => val
|
|
|
|
const createCompress = ({
|
|
enable = true,
|
|
serialize = JSONB.stringify,
|
|
deserialize = JSONB.parse,
|
|
compressOptions,
|
|
decompressOptions
|
|
} = {}) => {
|
|
if (!enable) {
|
|
return { serialize, deserialize, decompress: identity, compress: identity }
|
|
}
|
|
|
|
return {
|
|
serialize,
|
|
deserialize,
|
|
compress: async (data, options = {}) => {
|
|
if (data === undefined) return data
|
|
const serializedData = serialize(data)
|
|
return compress(serializedData, mergeOptions(compressOptions, options))
|
|
},
|
|
decompress: async (data, options = {}) => {
|
|
if (data === undefined) return data
|
|
return deserialize(
|
|
await decompress(data, mergeOptions(decompressOptions, options))
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = createCompress
|
|
module.exports.stringify = JSONB.stringify
|
|
module.exports.parse = JSONB.parse
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4968:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = (defaultOptions = {}, options = {}) => {
|
|
const params = {
|
|
...(defaultOptions.params || {}),
|
|
...(options.params || {})
|
|
}
|
|
|
|
return {
|
|
...defaultOptions,
|
|
...options,
|
|
...(Object.keys(params).length
|
|
? {
|
|
params
|
|
}
|
|
: {})
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2391:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {Transform, PassThrough} = __nccwpck_require__(2781);
|
|
const zlib = __nccwpck_require__(9796);
|
|
const mimicResponse = __nccwpck_require__(3877);
|
|
|
|
module.exports = response => {
|
|
const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();
|
|
|
|
if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
|
|
return response;
|
|
}
|
|
|
|
// TODO: Remove this when targeting Node.js 12.
|
|
const isBrotli = contentEncoding === 'br';
|
|
if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') {
|
|
response.destroy(new Error('Brotli is not supported on Node.js < 12'));
|
|
return response;
|
|
}
|
|
|
|
let isEmpty = true;
|
|
|
|
const checker = new Transform({
|
|
transform(data, _encoding, callback) {
|
|
isEmpty = false;
|
|
|
|
callback(null, data);
|
|
},
|
|
|
|
flush(callback) {
|
|
callback();
|
|
}
|
|
});
|
|
|
|
const finalStream = new PassThrough({
|
|
autoDestroy: false,
|
|
destroy(error, callback) {
|
|
response.destroy();
|
|
|
|
callback(error);
|
|
}
|
|
});
|
|
|
|
const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();
|
|
|
|
decompressStream.once('error', error => {
|
|
if (isEmpty && !response.readable) {
|
|
finalStream.end();
|
|
return;
|
|
}
|
|
|
|
finalStream.destroy(error);
|
|
});
|
|
|
|
mimicResponse(response, finalStream);
|
|
response.pipe(checker).pipe(decompressStream).pipe(finalStream);
|
|
|
|
return finalStream;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3877:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
// We define these manually to ensure they're always copied
|
|
// even if they would move up the prototype chain
|
|
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
|
|
const knownProperties = [
|
|
'aborted',
|
|
'complete',
|
|
'headers',
|
|
'httpVersion',
|
|
'httpVersionMinor',
|
|
'httpVersionMajor',
|
|
'method',
|
|
'rawHeaders',
|
|
'rawTrailers',
|
|
'setTimeout',
|
|
'socket',
|
|
'statusCode',
|
|
'statusMessage',
|
|
'trailers',
|
|
'url'
|
|
];
|
|
|
|
module.exports = (fromStream, toStream) => {
|
|
if (toStream._readableState.autoDestroy) {
|
|
throw new Error('The second stream must have the `autoDestroy` option set to `false`');
|
|
}
|
|
|
|
const fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));
|
|
|
|
const properties = {};
|
|
|
|
for (const property of fromProperties) {
|
|
// Don't overwrite existing properties.
|
|
if (property in toStream) {
|
|
continue;
|
|
}
|
|
|
|
properties[property] = {
|
|
get() {
|
|
const value = fromStream[property];
|
|
const isFunction = typeof value === 'function';
|
|
|
|
return isFunction ? value.bind(fromStream) : value;
|
|
},
|
|
set(value) {
|
|
fromStream[property] = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: false
|
|
};
|
|
}
|
|
|
|
Object.defineProperties(toStream, properties);
|
|
|
|
fromStream.once('aborted', () => {
|
|
toStream.destroy();
|
|
|
|
toStream.emit('aborted');
|
|
});
|
|
|
|
fromStream.once('close', () => {
|
|
if (fromStream.complete) {
|
|
if (toStream.readable) {
|
|
toStream.once('end', () => {
|
|
toStream.emit('close');
|
|
});
|
|
} else {
|
|
toStream.emit('close');
|
|
}
|
|
} else {
|
|
toStream.emit('close');
|
|
}
|
|
});
|
|
|
|
return toStream;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6214:
|
|
/***/ ((module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
function isTLSSocket(socket) {
|
|
return socket.encrypted;
|
|
}
|
|
const deferToConnect = (socket, fn) => {
|
|
let listeners;
|
|
if (typeof fn === 'function') {
|
|
const connect = fn;
|
|
listeners = { connect };
|
|
}
|
|
else {
|
|
listeners = fn;
|
|
}
|
|
const hasConnectListener = typeof listeners.connect === 'function';
|
|
const hasSecureConnectListener = typeof listeners.secureConnect === 'function';
|
|
const hasCloseListener = typeof listeners.close === 'function';
|
|
const onConnect = () => {
|
|
if (hasConnectListener) {
|
|
listeners.connect();
|
|
}
|
|
if (isTLSSocket(socket) && hasSecureConnectListener) {
|
|
if (socket.authorized) {
|
|
listeners.secureConnect();
|
|
}
|
|
else if (!socket.authorizationError) {
|
|
socket.once('secureConnect', listeners.secureConnect);
|
|
}
|
|
}
|
|
if (hasCloseListener) {
|
|
socket.once('close', listeners.close);
|
|
}
|
|
};
|
|
if (socket.writable && !socket.connecting) {
|
|
onConnect();
|
|
}
|
|
else if (socket.connecting) {
|
|
socket.once('connect', onConnect);
|
|
}
|
|
else if (socket.destroyed && hasCloseListener) {
|
|
listeners.close(socket._hadError);
|
|
}
|
|
};
|
|
exports["default"] = deferToConnect;
|
|
// For CommonJS default export support
|
|
module.exports = deferToConnect;
|
|
module.exports["default"] = deferToConnect;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8932:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
class Deprecation extends Error {
|
|
constructor(message) {
|
|
super(message); // Maintains proper stack trace (only available on V8)
|
|
|
|
/* istanbul ignore next */
|
|
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
|
|
this.name = 'Deprecation';
|
|
}
|
|
|
|
}
|
|
|
|
exports.Deprecation = Deprecation;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1205:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var once = __nccwpck_require__(1223);
|
|
|
|
var noop = function() {};
|
|
|
|
var isRequest = function(stream) {
|
|
return stream.setHeader && typeof stream.abort === 'function';
|
|
};
|
|
|
|
var isChildProcess = function(stream) {
|
|
return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
|
|
};
|
|
|
|
var eos = function(stream, opts, callback) {
|
|
if (typeof opts === 'function') return eos(stream, null, opts);
|
|
if (!opts) opts = {};
|
|
|
|
callback = once(callback || noop);
|
|
|
|
var ws = stream._writableState;
|
|
var rs = stream._readableState;
|
|
var readable = opts.readable || (opts.readable !== false && stream.readable);
|
|
var writable = opts.writable || (opts.writable !== false && stream.writable);
|
|
var cancelled = false;
|
|
|
|
var onlegacyfinish = function() {
|
|
if (!stream.writable) onfinish();
|
|
};
|
|
|
|
var onfinish = function() {
|
|
writable = false;
|
|
if (!readable) callback.call(stream);
|
|
};
|
|
|
|
var onend = function() {
|
|
readable = false;
|
|
if (!writable) callback.call(stream);
|
|
};
|
|
|
|
var onexit = function(exitCode) {
|
|
callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
|
|
};
|
|
|
|
var onerror = function(err) {
|
|
callback.call(stream, err);
|
|
};
|
|
|
|
var onclose = function() {
|
|
process.nextTick(onclosenexttick);
|
|
};
|
|
|
|
var onclosenexttick = function() {
|
|
if (cancelled) return;
|
|
if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
|
|
if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
|
|
};
|
|
|
|
var onrequest = function() {
|
|
stream.req.on('finish', onfinish);
|
|
};
|
|
|
|
if (isRequest(stream)) {
|
|
stream.on('complete', onfinish);
|
|
stream.on('abort', onclose);
|
|
if (stream.req) onrequest();
|
|
else stream.on('request', onrequest);
|
|
} else if (writable && !ws) { // legacy streams
|
|
stream.on('end', onlegacyfinish);
|
|
stream.on('close', onlegacyfinish);
|
|
}
|
|
|
|
if (isChildProcess(stream)) stream.on('exit', onexit);
|
|
|
|
stream.on('end', onend);
|
|
stream.on('finish', onfinish);
|
|
if (opts.error !== false) stream.on('error', onerror);
|
|
stream.on('close', onclose);
|
|
|
|
return function() {
|
|
cancelled = true;
|
|
stream.removeListener('complete', onfinish);
|
|
stream.removeListener('abort', onclose);
|
|
stream.removeListener('request', onrequest);
|
|
if (stream.req) stream.req.removeListener('finish', onfinish);
|
|
stream.removeListener('end', onlegacyfinish);
|
|
stream.removeListener('close', onlegacyfinish);
|
|
stream.removeListener('finish', onfinish);
|
|
stream.removeListener('exit', onexit);
|
|
stream.removeListener('end', onend);
|
|
stream.removeListener('error', onerror);
|
|
stream.removeListener('close', onclose);
|
|
};
|
|
};
|
|
|
|
module.exports = eos;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4460:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
var isGlob = __nccwpck_require__(4466);
|
|
var pathPosixDirname = (__nccwpck_require__(1017).posix.dirname);
|
|
var isWin32 = (__nccwpck_require__(2037).platform)() === 'win32';
|
|
|
|
var slash = '/';
|
|
var backslash = /\\/g;
|
|
var enclosure = /[\{\[].*[\}\]]$/;
|
|
var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
|
|
var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @param {Object} opts
|
|
* @param {boolean} [opts.flipBackslashes=true]
|
|
* @returns {string}
|
|
*/
|
|
module.exports = function globParent(str, opts) {
|
|
var options = Object.assign({ flipBackslashes: true }, opts);
|
|
|
|
// flip windows path separators
|
|
if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
|
|
str = str.replace(backslash, slash);
|
|
}
|
|
|
|
// special case for strings ending in enclosure containing path separator
|
|
if (enclosure.test(str)) {
|
|
str += slash;
|
|
}
|
|
|
|
// preserves full path in case of trailing path separator
|
|
str += 'a';
|
|
|
|
// remove path parts that are globby
|
|
do {
|
|
str = pathPosixDirname(str);
|
|
} while (isGlob(str) || globby.test(str));
|
|
|
|
// remove escape chars and return result
|
|
return str.replace(escaped, '$1');
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3664:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const taskManager = __nccwpck_require__(2708);
|
|
const patternManager = __nccwpck_require__(8306);
|
|
const async_1 = __nccwpck_require__(5679);
|
|
const stream_1 = __nccwpck_require__(4630);
|
|
const sync_1 = __nccwpck_require__(2405);
|
|
const settings_1 = __nccwpck_require__(952);
|
|
const utils = __nccwpck_require__(5444);
|
|
async function FastGlob(source, options) {
|
|
assertPatternsInput(source);
|
|
const works = getWorks(source, async_1.default, options);
|
|
const result = await Promise.all(works);
|
|
return utils.array.flatten(result);
|
|
}
|
|
// https://github.com/typescript-eslint/typescript-eslint/issues/60
|
|
// eslint-disable-next-line no-redeclare
|
|
(function (FastGlob) {
|
|
function sync(source, options) {
|
|
assertPatternsInput(source);
|
|
const works = getWorks(source, sync_1.default, options);
|
|
return utils.array.flatten(works);
|
|
}
|
|
FastGlob.sync = sync;
|
|
function stream(source, options) {
|
|
assertPatternsInput(source);
|
|
const works = getWorks(source, stream_1.default, options);
|
|
/**
|
|
* The stream returned by the provider cannot work with an asynchronous iterator.
|
|
* To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
|
|
* This affects performance (+25%). I don't see best solution right now.
|
|
*/
|
|
return utils.stream.merge(works);
|
|
}
|
|
FastGlob.stream = stream;
|
|
function generateTasks(source, options) {
|
|
assertPatternsInput(source);
|
|
const patterns = patternManager.transform([].concat(source));
|
|
const settings = new settings_1.default(options);
|
|
return taskManager.generate(patterns, settings);
|
|
}
|
|
FastGlob.generateTasks = generateTasks;
|
|
function isDynamicPattern(source, options) {
|
|
assertPatternsInput(source);
|
|
const settings = new settings_1.default(options);
|
|
return utils.pattern.isDynamicPattern(source, settings);
|
|
}
|
|
FastGlob.isDynamicPattern = isDynamicPattern;
|
|
function escapePath(source) {
|
|
assertPatternsInput(source);
|
|
return utils.path.escape(source);
|
|
}
|
|
FastGlob.escapePath = escapePath;
|
|
})(FastGlob || (FastGlob = {}));
|
|
function getWorks(source, _Provider, options) {
|
|
const patterns = patternManager.transform([].concat(source));
|
|
const settings = new settings_1.default(options);
|
|
const tasks = taskManager.generate(patterns, settings);
|
|
const provider = new _Provider(settings);
|
|
return tasks.map(provider.read, provider);
|
|
}
|
|
function assertPatternsInput(input) {
|
|
const source = [].concat(input);
|
|
const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
|
|
if (!isValidSource) {
|
|
throw new TypeError('Patterns must be a string (non empty) or an array of strings');
|
|
}
|
|
}
|
|
module.exports = FastGlob;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8306:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.removeDuplicateSlashes = exports.transform = void 0;
|
|
/**
|
|
* Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.
|
|
* The latter is due to the presence of the device path at the beginning of the UNC path.
|
|
* @todo rewrite to negative lookbehind with the next major release.
|
|
*/
|
|
const DOUBLE_SLASH_RE = /(?!^)\/{2,}/g;
|
|
function transform(patterns) {
|
|
return patterns.map((pattern) => removeDuplicateSlashes(pattern));
|
|
}
|
|
exports.transform = transform;
|
|
/**
|
|
* This package only works with forward slashes as a path separator.
|
|
* Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.
|
|
*/
|
|
function removeDuplicateSlashes(pattern) {
|
|
return pattern.replace(DOUBLE_SLASH_RE, '/');
|
|
}
|
|
exports.removeDuplicateSlashes = removeDuplicateSlashes;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2708:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;
|
|
const utils = __nccwpck_require__(5444);
|
|
function generate(patterns, settings) {
|
|
const positivePatterns = getPositivePatterns(patterns);
|
|
const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
|
|
const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
|
|
const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
|
|
const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
|
|
const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
|
|
return staticTasks.concat(dynamicTasks);
|
|
}
|
|
exports.generate = generate;
|
|
/**
|
|
* Returns tasks grouped by basic pattern directories.
|
|
*
|
|
* Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.
|
|
* This is necessary because directory traversal starts at the base directory and goes deeper.
|
|
*/
|
|
function convertPatternsToTasks(positive, negative, dynamic) {
|
|
const tasks = [];
|
|
const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);
|
|
const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);
|
|
const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);
|
|
const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);
|
|
tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));
|
|
/*
|
|
* For the sake of reducing future accesses to the file system, we merge all tasks within the current directory
|
|
* into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.
|
|
*/
|
|
if ('.' in insideCurrentDirectoryGroup) {
|
|
tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));
|
|
}
|
|
else {
|
|
tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));
|
|
}
|
|
return tasks;
|
|
}
|
|
exports.convertPatternsToTasks = convertPatternsToTasks;
|
|
function getPositivePatterns(patterns) {
|
|
return utils.pattern.getPositivePatterns(patterns);
|
|
}
|
|
exports.getPositivePatterns = getPositivePatterns;
|
|
function getNegativePatternsAsPositive(patterns, ignore) {
|
|
const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
|
|
const positive = negative.map(utils.pattern.convertToPositivePattern);
|
|
return positive;
|
|
}
|
|
exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
|
|
function groupPatternsByBaseDirectory(patterns) {
|
|
const group = {};
|
|
return patterns.reduce((collection, pattern) => {
|
|
const base = utils.pattern.getBaseDirectory(pattern);
|
|
if (base in collection) {
|
|
collection[base].push(pattern);
|
|
}
|
|
else {
|
|
collection[base] = [pattern];
|
|
}
|
|
return collection;
|
|
}, group);
|
|
}
|
|
exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
|
|
function convertPatternGroupsToTasks(positive, negative, dynamic) {
|
|
return Object.keys(positive).map((base) => {
|
|
return convertPatternGroupToTask(base, positive[base], negative, dynamic);
|
|
});
|
|
}
|
|
exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
|
|
function convertPatternGroupToTask(base, positive, negative, dynamic) {
|
|
return {
|
|
dynamic,
|
|
positive,
|
|
negative,
|
|
base,
|
|
patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
|
|
};
|
|
}
|
|
exports.convertPatternGroupToTask = convertPatternGroupToTask;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5679:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const stream_1 = __nccwpck_require__(2083);
|
|
const provider_1 = __nccwpck_require__(257);
|
|
class ProviderAsync extends provider_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._reader = new stream_1.default(this._settings);
|
|
}
|
|
read(task) {
|
|
const root = this._getRootDirectory(task);
|
|
const options = this._getReaderOptions(task);
|
|
const entries = [];
|
|
return new Promise((resolve, reject) => {
|
|
const stream = this.api(root, task, options);
|
|
stream.once('error', reject);
|
|
stream.on('data', (entry) => entries.push(options.transform(entry)));
|
|
stream.once('end', () => resolve(entries));
|
|
});
|
|
}
|
|
api(root, task, options) {
|
|
if (task.dynamic) {
|
|
return this._reader.dynamic(root, options);
|
|
}
|
|
return this._reader.static(task.patterns, options);
|
|
}
|
|
}
|
|
exports["default"] = ProviderAsync;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6983:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const utils = __nccwpck_require__(5444);
|
|
const partial_1 = __nccwpck_require__(5295);
|
|
class DeepFilter {
|
|
constructor(_settings, _micromatchOptions) {
|
|
this._settings = _settings;
|
|
this._micromatchOptions = _micromatchOptions;
|
|
}
|
|
getFilter(basePath, positive, negative) {
|
|
const matcher = this._getMatcher(positive);
|
|
const negativeRe = this._getNegativePatternsRe(negative);
|
|
return (entry) => this._filter(basePath, entry, matcher, negativeRe);
|
|
}
|
|
_getMatcher(patterns) {
|
|
return new partial_1.default(patterns, this._settings, this._micromatchOptions);
|
|
}
|
|
_getNegativePatternsRe(patterns) {
|
|
const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
|
|
return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
|
|
}
|
|
_filter(basePath, entry, matcher, negativeRe) {
|
|
if (this._isSkippedByDeep(basePath, entry.path)) {
|
|
return false;
|
|
}
|
|
if (this._isSkippedSymbolicLink(entry)) {
|
|
return false;
|
|
}
|
|
const filepath = utils.path.removeLeadingDotSegment(entry.path);
|
|
if (this._isSkippedByPositivePatterns(filepath, matcher)) {
|
|
return false;
|
|
}
|
|
return this._isSkippedByNegativePatterns(filepath, negativeRe);
|
|
}
|
|
_isSkippedByDeep(basePath, entryPath) {
|
|
/**
|
|
* Avoid unnecessary depth calculations when it doesn't matter.
|
|
*/
|
|
if (this._settings.deep === Infinity) {
|
|
return false;
|
|
}
|
|
return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
|
|
}
|
|
_getEntryLevel(basePath, entryPath) {
|
|
const entryPathDepth = entryPath.split('/').length;
|
|
if (basePath === '') {
|
|
return entryPathDepth;
|
|
}
|
|
const basePathDepth = basePath.split('/').length;
|
|
return entryPathDepth - basePathDepth;
|
|
}
|
|
_isSkippedSymbolicLink(entry) {
|
|
return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
|
|
}
|
|
_isSkippedByPositivePatterns(entryPath, matcher) {
|
|
return !this._settings.baseNameMatch && !matcher.match(entryPath);
|
|
}
|
|
_isSkippedByNegativePatterns(entryPath, patternsRe) {
|
|
return !utils.pattern.matchAny(entryPath, patternsRe);
|
|
}
|
|
}
|
|
exports["default"] = DeepFilter;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1343:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const utils = __nccwpck_require__(5444);
|
|
class EntryFilter {
|
|
constructor(_settings, _micromatchOptions) {
|
|
this._settings = _settings;
|
|
this._micromatchOptions = _micromatchOptions;
|
|
this.index = new Map();
|
|
}
|
|
getFilter(positive, negative) {
|
|
const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
|
|
const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
|
|
return (entry) => this._filter(entry, positiveRe, negativeRe);
|
|
}
|
|
_filter(entry, positiveRe, negativeRe) {
|
|
if (this._settings.unique && this._isDuplicateEntry(entry)) {
|
|
return false;
|
|
}
|
|
if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
|
|
return false;
|
|
}
|
|
if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
|
|
return false;
|
|
}
|
|
const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
|
|
const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
|
|
if (this._settings.unique && isMatched) {
|
|
this._createIndexRecord(entry);
|
|
}
|
|
return isMatched;
|
|
}
|
|
_isDuplicateEntry(entry) {
|
|
return this.index.has(entry.path);
|
|
}
|
|
_createIndexRecord(entry) {
|
|
this.index.set(entry.path, undefined);
|
|
}
|
|
_onlyFileFilter(entry) {
|
|
return this._settings.onlyFiles && !entry.dirent.isFile();
|
|
}
|
|
_onlyDirectoryFilter(entry) {
|
|
return this._settings.onlyDirectories && !entry.dirent.isDirectory();
|
|
}
|
|
_isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
|
|
if (!this._settings.absolute) {
|
|
return false;
|
|
}
|
|
const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
|
|
return utils.pattern.matchAny(fullpath, patternsRe);
|
|
}
|
|
/**
|
|
* First, just trying to apply patterns to the path.
|
|
* Second, trying to apply patterns to the path with final slash.
|
|
*/
|
|
_isMatchToPatterns(entryPath, patternsRe) {
|
|
const filepath = utils.path.removeLeadingDotSegment(entryPath);
|
|
return utils.pattern.matchAny(filepath, patternsRe) || utils.pattern.matchAny(filepath + '/', patternsRe);
|
|
}
|
|
}
|
|
exports["default"] = EntryFilter;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6654:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const utils = __nccwpck_require__(5444);
|
|
class ErrorFilter {
|
|
constructor(_settings) {
|
|
this._settings = _settings;
|
|
}
|
|
getFilter() {
|
|
return (error) => this._isNonFatalError(error);
|
|
}
|
|
_isNonFatalError(error) {
|
|
return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
|
|
}
|
|
}
|
|
exports["default"] = ErrorFilter;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2576:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const utils = __nccwpck_require__(5444);
|
|
class Matcher {
|
|
constructor(_patterns, _settings, _micromatchOptions) {
|
|
this._patterns = _patterns;
|
|
this._settings = _settings;
|
|
this._micromatchOptions = _micromatchOptions;
|
|
this._storage = [];
|
|
this._fillStorage();
|
|
}
|
|
_fillStorage() {
|
|
/**
|
|
* The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
|
|
* So, before expand patterns with brace expansion into separated patterns.
|
|
*/
|
|
const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
|
|
for (const pattern of patterns) {
|
|
const segments = this._getPatternSegments(pattern);
|
|
const sections = this._splitSegmentsIntoSections(segments);
|
|
this._storage.push({
|
|
complete: sections.length <= 1,
|
|
pattern,
|
|
segments,
|
|
sections
|
|
});
|
|
}
|
|
}
|
|
_getPatternSegments(pattern) {
|
|
const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
|
|
return parts.map((part) => {
|
|
const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
|
|
if (!dynamic) {
|
|
return {
|
|
dynamic: false,
|
|
pattern: part
|
|
};
|
|
}
|
|
return {
|
|
dynamic: true,
|
|
pattern: part,
|
|
patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
|
|
};
|
|
});
|
|
}
|
|
_splitSegmentsIntoSections(segments) {
|
|
return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
|
|
}
|
|
}
|
|
exports["default"] = Matcher;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5295:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const matcher_1 = __nccwpck_require__(2576);
|
|
class PartialMatcher extends matcher_1.default {
|
|
match(filepath) {
|
|
const parts = filepath.split('/');
|
|
const levels = parts.length;
|
|
const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
|
|
for (const pattern of patterns) {
|
|
const section = pattern.sections[0];
|
|
/**
|
|
* In this case, the pattern has a globstar and we must read all directories unconditionally,
|
|
* but only if the level has reached the end of the first group.
|
|
*
|
|
* fixtures/{a,b}/**
|
|
* ^ true/false ^ always true
|
|
*/
|
|
if (!pattern.complete && levels > section.length) {
|
|
return true;
|
|
}
|
|
const match = parts.every((part, index) => {
|
|
const segment = pattern.segments[index];
|
|
if (segment.dynamic && segment.patternRe.test(part)) {
|
|
return true;
|
|
}
|
|
if (!segment.dynamic && segment.pattern === part) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
if (match) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
exports["default"] = PartialMatcher;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 257:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const path = __nccwpck_require__(1017);
|
|
const deep_1 = __nccwpck_require__(6983);
|
|
const entry_1 = __nccwpck_require__(1343);
|
|
const error_1 = __nccwpck_require__(6654);
|
|
const entry_2 = __nccwpck_require__(4029);
|
|
class Provider {
|
|
constructor(_settings) {
|
|
this._settings = _settings;
|
|
this.errorFilter = new error_1.default(this._settings);
|
|
this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
|
|
this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
|
|
this.entryTransformer = new entry_2.default(this._settings);
|
|
}
|
|
_getRootDirectory(task) {
|
|
return path.resolve(this._settings.cwd, task.base);
|
|
}
|
|
_getReaderOptions(task) {
|
|
const basePath = task.base === '.' ? '' : task.base;
|
|
return {
|
|
basePath,
|
|
pathSegmentSeparator: '/',
|
|
concurrency: this._settings.concurrency,
|
|
deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
|
|
entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
|
|
errorFilter: this.errorFilter.getFilter(),
|
|
followSymbolicLinks: this._settings.followSymbolicLinks,
|
|
fs: this._settings.fs,
|
|
stats: this._settings.stats,
|
|
throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
|
|
transform: this.entryTransformer.getTransformer()
|
|
};
|
|
}
|
|
_getMicromatchOptions() {
|
|
return {
|
|
dot: this._settings.dot,
|
|
matchBase: this._settings.baseNameMatch,
|
|
nobrace: !this._settings.braceExpansion,
|
|
nocase: !this._settings.caseSensitiveMatch,
|
|
noext: !this._settings.extglob,
|
|
noglobstar: !this._settings.globstar,
|
|
posix: true,
|
|
strictSlashes: false
|
|
};
|
|
}
|
|
}
|
|
exports["default"] = Provider;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4630:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const stream_1 = __nccwpck_require__(2781);
|
|
const stream_2 = __nccwpck_require__(2083);
|
|
const provider_1 = __nccwpck_require__(257);
|
|
class ProviderStream extends provider_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._reader = new stream_2.default(this._settings);
|
|
}
|
|
read(task) {
|
|
const root = this._getRootDirectory(task);
|
|
const options = this._getReaderOptions(task);
|
|
const source = this.api(root, task, options);
|
|
const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
|
|
source
|
|
.once('error', (error) => destination.emit('error', error))
|
|
.on('data', (entry) => destination.emit('data', options.transform(entry)))
|
|
.once('end', () => destination.emit('end'));
|
|
destination
|
|
.once('close', () => source.destroy());
|
|
return destination;
|
|
}
|
|
api(root, task, options) {
|
|
if (task.dynamic) {
|
|
return this._reader.dynamic(root, options);
|
|
}
|
|
return this._reader.static(task.patterns, options);
|
|
}
|
|
}
|
|
exports["default"] = ProviderStream;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2405:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const sync_1 = __nccwpck_require__(8821);
|
|
const provider_1 = __nccwpck_require__(257);
|
|
class ProviderSync extends provider_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._reader = new sync_1.default(this._settings);
|
|
}
|
|
read(task) {
|
|
const root = this._getRootDirectory(task);
|
|
const options = this._getReaderOptions(task);
|
|
const entries = this.api(root, task, options);
|
|
return entries.map(options.transform);
|
|
}
|
|
api(root, task, options) {
|
|
if (task.dynamic) {
|
|
return this._reader.dynamic(root, options);
|
|
}
|
|
return this._reader.static(task.patterns, options);
|
|
}
|
|
}
|
|
exports["default"] = ProviderSync;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4029:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const utils = __nccwpck_require__(5444);
|
|
class EntryTransformer {
|
|
constructor(_settings) {
|
|
this._settings = _settings;
|
|
}
|
|
getTransformer() {
|
|
return (entry) => this._transform(entry);
|
|
}
|
|
_transform(entry) {
|
|
let filepath = entry.path;
|
|
if (this._settings.absolute) {
|
|
filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
|
|
filepath = utils.path.unixify(filepath);
|
|
}
|
|
if (this._settings.markDirectories && entry.dirent.isDirectory()) {
|
|
filepath += '/';
|
|
}
|
|
if (!this._settings.objectMode) {
|
|
return filepath;
|
|
}
|
|
return Object.assign(Object.assign({}, entry), { path: filepath });
|
|
}
|
|
}
|
|
exports["default"] = EntryTransformer;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5582:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const path = __nccwpck_require__(1017);
|
|
const fsStat = __nccwpck_require__(109);
|
|
const utils = __nccwpck_require__(5444);
|
|
class Reader {
|
|
constructor(_settings) {
|
|
this._settings = _settings;
|
|
this._fsStatSettings = new fsStat.Settings({
|
|
followSymbolicLink: this._settings.followSymbolicLinks,
|
|
fs: this._settings.fs,
|
|
throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
|
|
});
|
|
}
|
|
_getFullEntryPath(filepath) {
|
|
return path.resolve(this._settings.cwd, filepath);
|
|
}
|
|
_makeEntry(stats, pattern) {
|
|
const entry = {
|
|
name: pattern,
|
|
path: pattern,
|
|
dirent: utils.fs.createDirentFromStats(pattern, stats)
|
|
};
|
|
if (this._settings.stats) {
|
|
entry.stats = stats;
|
|
}
|
|
return entry;
|
|
}
|
|
_isFatalError(error) {
|
|
return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
|
|
}
|
|
}
|
|
exports["default"] = Reader;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2083:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const stream_1 = __nccwpck_require__(2781);
|
|
const fsStat = __nccwpck_require__(109);
|
|
const fsWalk = __nccwpck_require__(6026);
|
|
const reader_1 = __nccwpck_require__(5582);
|
|
class ReaderStream extends reader_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._walkStream = fsWalk.walkStream;
|
|
this._stat = fsStat.stat;
|
|
}
|
|
dynamic(root, options) {
|
|
return this._walkStream(root, options);
|
|
}
|
|
static(patterns, options) {
|
|
const filepaths = patterns.map(this._getFullEntryPath, this);
|
|
const stream = new stream_1.PassThrough({ objectMode: true });
|
|
stream._write = (index, _enc, done) => {
|
|
return this._getEntry(filepaths[index], patterns[index], options)
|
|
.then((entry) => {
|
|
if (entry !== null && options.entryFilter(entry)) {
|
|
stream.push(entry);
|
|
}
|
|
if (index === filepaths.length - 1) {
|
|
stream.end();
|
|
}
|
|
done();
|
|
})
|
|
.catch(done);
|
|
};
|
|
for (let i = 0; i < filepaths.length; i++) {
|
|
stream.write(i);
|
|
}
|
|
return stream;
|
|
}
|
|
_getEntry(filepath, pattern, options) {
|
|
return this._getStat(filepath)
|
|
.then((stats) => this._makeEntry(stats, pattern))
|
|
.catch((error) => {
|
|
if (options.errorFilter(error)) {
|
|
return null;
|
|
}
|
|
throw error;
|
|
});
|
|
}
|
|
_getStat(filepath) {
|
|
return new Promise((resolve, reject) => {
|
|
this._stat(filepath, this._fsStatSettings, (error, stats) => {
|
|
return error === null ? resolve(stats) : reject(error);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
exports["default"] = ReaderStream;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8821:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
const fsStat = __nccwpck_require__(109);
|
|
const fsWalk = __nccwpck_require__(6026);
|
|
const reader_1 = __nccwpck_require__(5582);
|
|
class ReaderSync extends reader_1.default {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._walkSync = fsWalk.walkSync;
|
|
this._statSync = fsStat.statSync;
|
|
}
|
|
dynamic(root, options) {
|
|
return this._walkSync(root, options);
|
|
}
|
|
static(patterns, options) {
|
|
const entries = [];
|
|
for (const pattern of patterns) {
|
|
const filepath = this._getFullEntryPath(pattern);
|
|
const entry = this._getEntry(filepath, pattern, options);
|
|
if (entry === null || !options.entryFilter(entry)) {
|
|
continue;
|
|
}
|
|
entries.push(entry);
|
|
}
|
|
return entries;
|
|
}
|
|
_getEntry(filepath, pattern, options) {
|
|
try {
|
|
const stats = this._getStat(filepath);
|
|
return this._makeEntry(stats, pattern);
|
|
}
|
|
catch (error) {
|
|
if (options.errorFilter(error)) {
|
|
return null;
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
_getStat(filepath) {
|
|
return this._statSync(filepath, this._fsStatSettings);
|
|
}
|
|
}
|
|
exports["default"] = ReaderSync;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 952:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
|
|
const fs = __nccwpck_require__(7147);
|
|
const os = __nccwpck_require__(2037);
|
|
/**
|
|
* The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.
|
|
* https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
|
|
*/
|
|
const CPU_COUNT = Math.max(os.cpus().length, 1);
|
|
exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
|
|
lstat: fs.lstat,
|
|
lstatSync: fs.lstatSync,
|
|
stat: fs.stat,
|
|
statSync: fs.statSync,
|
|
readdir: fs.readdir,
|
|
readdirSync: fs.readdirSync
|
|
};
|
|
class Settings {
|
|
constructor(_options = {}) {
|
|
this._options = _options;
|
|
this.absolute = this._getValue(this._options.absolute, false);
|
|
this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
|
|
this.braceExpansion = this._getValue(this._options.braceExpansion, true);
|
|
this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
|
|
this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
|
|
this.cwd = this._getValue(this._options.cwd, process.cwd());
|
|
this.deep = this._getValue(this._options.deep, Infinity);
|
|
this.dot = this._getValue(this._options.dot, false);
|
|
this.extglob = this._getValue(this._options.extglob, true);
|
|
this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
|
|
this.fs = this._getFileSystemMethods(this._options.fs);
|
|
this.globstar = this._getValue(this._options.globstar, true);
|
|
this.ignore = this._getValue(this._options.ignore, []);
|
|
this.markDirectories = this._getValue(this._options.markDirectories, false);
|
|
this.objectMode = this._getValue(this._options.objectMode, false);
|
|
this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
|
|
this.onlyFiles = this._getValue(this._options.onlyFiles, true);
|
|
this.stats = this._getValue(this._options.stats, false);
|
|
this.suppressErrors = this._getValue(this._options.suppressErrors, false);
|
|
this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
|
|
this.unique = this._getValue(this._options.unique, true);
|
|
if (this.onlyDirectories) {
|
|
this.onlyFiles = false;
|
|
}
|
|
if (this.stats) {
|
|
this.objectMode = true;
|
|
}
|
|
}
|
|
_getValue(option, value) {
|
|
return option === undefined ? value : option;
|
|
}
|
|
_getFileSystemMethods(methods = {}) {
|
|
return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
|
|
}
|
|
}
|
|
exports["default"] = Settings;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5325:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.splitWhen = exports.flatten = void 0;
|
|
function flatten(items) {
|
|
return items.reduce((collection, item) => [].concat(collection, item), []);
|
|
}
|
|
exports.flatten = flatten;
|
|
function splitWhen(items, predicate) {
|
|
const result = [[]];
|
|
let groupIndex = 0;
|
|
for (const item of items) {
|
|
if (predicate(item)) {
|
|
groupIndex++;
|
|
result[groupIndex] = [];
|
|
}
|
|
else {
|
|
result[groupIndex].push(item);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
exports.splitWhen = splitWhen;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1230:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.isEnoentCodeError = void 0;
|
|
function isEnoentCodeError(error) {
|
|
return error.code === 'ENOENT';
|
|
}
|
|
exports.isEnoentCodeError = isEnoentCodeError;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7543:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.createDirentFromStats = void 0;
|
|
class DirentFromStats {
|
|
constructor(name, stats) {
|
|
this.name = name;
|
|
this.isBlockDevice = stats.isBlockDevice.bind(stats);
|
|
this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
|
|
this.isDirectory = stats.isDirectory.bind(stats);
|
|
this.isFIFO = stats.isFIFO.bind(stats);
|
|
this.isFile = stats.isFile.bind(stats);
|
|
this.isSocket = stats.isSocket.bind(stats);
|
|
this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
|
|
}
|
|
}
|
|
function createDirentFromStats(name, stats) {
|
|
return new DirentFromStats(name, stats);
|
|
}
|
|
exports.createDirentFromStats = createDirentFromStats;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5444:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;
|
|
const array = __nccwpck_require__(5325);
|
|
exports.array = array;
|
|
const errno = __nccwpck_require__(1230);
|
|
exports.errno = errno;
|
|
const fs = __nccwpck_require__(7543);
|
|
exports.fs = fs;
|
|
const path = __nccwpck_require__(3873);
|
|
exports.path = path;
|
|
const pattern = __nccwpck_require__(1221);
|
|
exports.pattern = pattern;
|
|
const stream = __nccwpck_require__(8382);
|
|
exports.stream = stream;
|
|
const string = __nccwpck_require__(2203);
|
|
exports.string = string;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3873:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;
|
|
const path = __nccwpck_require__(1017);
|
|
const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
|
|
const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
|
|
/**
|
|
* Designed to work only with simple paths: `dir\\file`.
|
|
*/
|
|
function unixify(filepath) {
|
|
return filepath.replace(/\\/g, '/');
|
|
}
|
|
exports.unixify = unixify;
|
|
function makeAbsolute(cwd, filepath) {
|
|
return path.resolve(cwd, filepath);
|
|
}
|
|
exports.makeAbsolute = makeAbsolute;
|
|
function escape(pattern) {
|
|
return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
|
|
}
|
|
exports.escape = escape;
|
|
function removeLeadingDotSegment(entry) {
|
|
// We do not use `startsWith` because this is 10x slower than current implementation for some cases.
|
|
// eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
|
|
if (entry.charAt(0) === '.') {
|
|
const secondCharactery = entry.charAt(1);
|
|
if (secondCharactery === '/' || secondCharactery === '\\') {
|
|
return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
|
|
}
|
|
}
|
|
return entry;
|
|
}
|
|
exports.removeLeadingDotSegment = removeLeadingDotSegment;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1221:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;
|
|
const path = __nccwpck_require__(1017);
|
|
const globParent = __nccwpck_require__(4460);
|
|
const micromatch = __nccwpck_require__(6228);
|
|
const GLOBSTAR = '**';
|
|
const ESCAPE_SYMBOL = '\\';
|
|
const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
|
|
const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[[^[]*]/;
|
|
const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\([^(]*\|[^|]*\)/;
|
|
const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\([^(]*\)/;
|
|
const BRACE_EXPANSION_SEPARATORS_RE = /,|\.\./;
|
|
function isStaticPattern(pattern, options = {}) {
|
|
return !isDynamicPattern(pattern, options);
|
|
}
|
|
exports.isStaticPattern = isStaticPattern;
|
|
function isDynamicPattern(pattern, options = {}) {
|
|
/**
|
|
* A special case with an empty string is necessary for matching patterns that start with a forward slash.
|
|
* An empty string cannot be a dynamic pattern.
|
|
* For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
|
|
*/
|
|
if (pattern === '') {
|
|
return false;
|
|
}
|
|
/**
|
|
* When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
|
|
* filepath directly (without read directory).
|
|
*/
|
|
if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
|
|
return true;
|
|
}
|
|
if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
|
|
return true;
|
|
}
|
|
if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
|
|
return true;
|
|
}
|
|
if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
exports.isDynamicPattern = isDynamicPattern;
|
|
function hasBraceExpansion(pattern) {
|
|
const openingBraceIndex = pattern.indexOf('{');
|
|
if (openingBraceIndex === -1) {
|
|
return false;
|
|
}
|
|
const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);
|
|
if (closingBraceIndex === -1) {
|
|
return false;
|
|
}
|
|
const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);
|
|
return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);
|
|
}
|
|
function convertToPositivePattern(pattern) {
|
|
return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
|
|
}
|
|
exports.convertToPositivePattern = convertToPositivePattern;
|
|
function convertToNegativePattern(pattern) {
|
|
return '!' + pattern;
|
|
}
|
|
exports.convertToNegativePattern = convertToNegativePattern;
|
|
function isNegativePattern(pattern) {
|
|
return pattern.startsWith('!') && pattern[1] !== '(';
|
|
}
|
|
exports.isNegativePattern = isNegativePattern;
|
|
function isPositivePattern(pattern) {
|
|
return !isNegativePattern(pattern);
|
|
}
|
|
exports.isPositivePattern = isPositivePattern;
|
|
function getNegativePatterns(patterns) {
|
|
return patterns.filter(isNegativePattern);
|
|
}
|
|
exports.getNegativePatterns = getNegativePatterns;
|
|
function getPositivePatterns(patterns) {
|
|
return patterns.filter(isPositivePattern);
|
|
}
|
|
exports.getPositivePatterns = getPositivePatterns;
|
|
/**
|
|
* Returns patterns that can be applied inside the current directory.
|
|
*
|
|
* @example
|
|
* // ['./*', '*', 'a/*']
|
|
* getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])
|
|
*/
|
|
function getPatternsInsideCurrentDirectory(patterns) {
|
|
return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));
|
|
}
|
|
exports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;
|
|
/**
|
|
* Returns patterns to be expanded relative to (outside) the current directory.
|
|
*
|
|
* @example
|
|
* // ['../*', './../*']
|
|
* getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])
|
|
*/
|
|
function getPatternsOutsideCurrentDirectory(patterns) {
|
|
return patterns.filter(isPatternRelatedToParentDirectory);
|
|
}
|
|
exports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;
|
|
function isPatternRelatedToParentDirectory(pattern) {
|
|
return pattern.startsWith('..') || pattern.startsWith('./..');
|
|
}
|
|
exports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;
|
|
function getBaseDirectory(pattern) {
|
|
return globParent(pattern, { flipBackslashes: false });
|
|
}
|
|
exports.getBaseDirectory = getBaseDirectory;
|
|
function hasGlobStar(pattern) {
|
|
return pattern.includes(GLOBSTAR);
|
|
}
|
|
exports.hasGlobStar = hasGlobStar;
|
|
function endsWithSlashGlobStar(pattern) {
|
|
return pattern.endsWith('/' + GLOBSTAR);
|
|
}
|
|
exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
|
|
function isAffectDepthOfReadingPattern(pattern) {
|
|
const basename = path.basename(pattern);
|
|
return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
|
|
}
|
|
exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
|
|
function expandPatternsWithBraceExpansion(patterns) {
|
|
return patterns.reduce((collection, pattern) => {
|
|
return collection.concat(expandBraceExpansion(pattern));
|
|
}, []);
|
|
}
|
|
exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
|
|
function expandBraceExpansion(pattern) {
|
|
return micromatch.braces(pattern, {
|
|
expand: true,
|
|
nodupes: true
|
|
});
|
|
}
|
|
exports.expandBraceExpansion = expandBraceExpansion;
|
|
function getPatternParts(pattern, options) {
|
|
let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
|
|
/**
|
|
* The scan method returns an empty array in some cases.
|
|
* See micromatch/picomatch#58 for more details.
|
|
*/
|
|
if (parts.length === 0) {
|
|
parts = [pattern];
|
|
}
|
|
/**
|
|
* The scan method does not return an empty part for the pattern with a forward slash.
|
|
* This is another part of micromatch/picomatch#58.
|
|
*/
|
|
if (parts[0].startsWith('/')) {
|
|
parts[0] = parts[0].slice(1);
|
|
parts.unshift('');
|
|
}
|
|
return parts;
|
|
}
|
|
exports.getPatternParts = getPatternParts;
|
|
function makeRe(pattern, options) {
|
|
return micromatch.makeRe(pattern, options);
|
|
}
|
|
exports.makeRe = makeRe;
|
|
function convertPatternsToRe(patterns, options) {
|
|
return patterns.map((pattern) => makeRe(pattern, options));
|
|
}
|
|
exports.convertPatternsToRe = convertPatternsToRe;
|
|
function matchAny(entry, patternsRe) {
|
|
return patternsRe.some((patternRe) => patternRe.test(entry));
|
|
}
|
|
exports.matchAny = matchAny;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8382:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.merge = void 0;
|
|
const merge2 = __nccwpck_require__(2578);
|
|
function merge(streams) {
|
|
const mergedStream = merge2(streams);
|
|
streams.forEach((stream) => {
|
|
stream.once('error', (error) => mergedStream.emit('error', error));
|
|
});
|
|
mergedStream.once('close', () => propagateCloseEventToSources(streams));
|
|
mergedStream.once('end', () => propagateCloseEventToSources(streams));
|
|
return mergedStream;
|
|
}
|
|
exports.merge = merge;
|
|
function propagateCloseEventToSources(streams) {
|
|
streams.forEach((stream) => stream.emit('close'));
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2203:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
exports.isEmpty = exports.isString = void 0;
|
|
function isString(input) {
|
|
return typeof input === 'string';
|
|
}
|
|
exports.isString = isString;
|
|
function isEmpty(input) {
|
|
return input === '';
|
|
}
|
|
exports.isEmpty = isEmpty;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7340:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
/* eslint-disable no-var */
|
|
|
|
var reusify = __nccwpck_require__(2113)
|
|
|
|
function fastqueue (context, worker, concurrency) {
|
|
if (typeof context === 'function') {
|
|
concurrency = worker
|
|
worker = context
|
|
context = null
|
|
}
|
|
|
|
if (concurrency < 1) {
|
|
throw new Error('fastqueue concurrency must be greater than 1')
|
|
}
|
|
|
|
var cache = reusify(Task)
|
|
var queueHead = null
|
|
var queueTail = null
|
|
var _running = 0
|
|
var errorHandler = null
|
|
|
|
var self = {
|
|
push: push,
|
|
drain: noop,
|
|
saturated: noop,
|
|
pause: pause,
|
|
paused: false,
|
|
concurrency: concurrency,
|
|
running: running,
|
|
resume: resume,
|
|
idle: idle,
|
|
length: length,
|
|
getQueue: getQueue,
|
|
unshift: unshift,
|
|
empty: noop,
|
|
kill: kill,
|
|
killAndDrain: killAndDrain,
|
|
error: error
|
|
}
|
|
|
|
return self
|
|
|
|
function running () {
|
|
return _running
|
|
}
|
|
|
|
function pause () {
|
|
self.paused = true
|
|
}
|
|
|
|
function length () {
|
|
var current = queueHead
|
|
var counter = 0
|
|
|
|
while (current) {
|
|
current = current.next
|
|
counter++
|
|
}
|
|
|
|
return counter
|
|
}
|
|
|
|
function getQueue () {
|
|
var current = queueHead
|
|
var tasks = []
|
|
|
|
while (current) {
|
|
tasks.push(current.value)
|
|
current = current.next
|
|
}
|
|
|
|
return tasks
|
|
}
|
|
|
|
function resume () {
|
|
if (!self.paused) return
|
|
self.paused = false
|
|
for (var i = 0; i < self.concurrency; i++) {
|
|
_running++
|
|
release()
|
|
}
|
|
}
|
|
|
|
function idle () {
|
|
return _running === 0 && self.length() === 0
|
|
}
|
|
|
|
function push (value, done) {
|
|
var current = cache.get()
|
|
|
|
current.context = context
|
|
current.release = release
|
|
current.value = value
|
|
current.callback = done || noop
|
|
current.errorHandler = errorHandler
|
|
|
|
if (_running === self.concurrency || self.paused) {
|
|
if (queueTail) {
|
|
queueTail.next = current
|
|
queueTail = current
|
|
} else {
|
|
queueHead = current
|
|
queueTail = current
|
|
self.saturated()
|
|
}
|
|
} else {
|
|
_running++
|
|
worker.call(context, current.value, current.worked)
|
|
}
|
|
}
|
|
|
|
function unshift (value, done) {
|
|
var current = cache.get()
|
|
|
|
current.context = context
|
|
current.release = release
|
|
current.value = value
|
|
current.callback = done || noop
|
|
|
|
if (_running === self.concurrency || self.paused) {
|
|
if (queueHead) {
|
|
current.next = queueHead
|
|
queueHead = current
|
|
} else {
|
|
queueHead = current
|
|
queueTail = current
|
|
self.saturated()
|
|
}
|
|
} else {
|
|
_running++
|
|
worker.call(context, current.value, current.worked)
|
|
}
|
|
}
|
|
|
|
function release (holder) {
|
|
if (holder) {
|
|
cache.release(holder)
|
|
}
|
|
var next = queueHead
|
|
if (next) {
|
|
if (!self.paused) {
|
|
if (queueTail === queueHead) {
|
|
queueTail = null
|
|
}
|
|
queueHead = next.next
|
|
next.next = null
|
|
worker.call(context, next.value, next.worked)
|
|
if (queueTail === null) {
|
|
self.empty()
|
|
}
|
|
} else {
|
|
_running--
|
|
}
|
|
} else if (--_running === 0) {
|
|
self.drain()
|
|
}
|
|
}
|
|
|
|
function kill () {
|
|
queueHead = null
|
|
queueTail = null
|
|
self.drain = noop
|
|
}
|
|
|
|
function killAndDrain () {
|
|
queueHead = null
|
|
queueTail = null
|
|
self.drain()
|
|
self.drain = noop
|
|
}
|
|
|
|
function error (handler) {
|
|
errorHandler = handler
|
|
}
|
|
}
|
|
|
|
function noop () {}
|
|
|
|
function Task () {
|
|
this.value = null
|
|
this.callback = noop
|
|
this.next = null
|
|
this.release = noop
|
|
this.context = null
|
|
this.errorHandler = null
|
|
|
|
var self = this
|
|
|
|
this.worked = function worked (err, result) {
|
|
var callback = self.callback
|
|
var errorHandler = self.errorHandler
|
|
var val = self.value
|
|
self.value = null
|
|
self.callback = noop
|
|
if (self.errorHandler) {
|
|
errorHandler(err, val)
|
|
}
|
|
callback.call(self.context, err, result)
|
|
self.release(self)
|
|
}
|
|
}
|
|
|
|
function queueAsPromised (context, worker, concurrency) {
|
|
if (typeof context === 'function') {
|
|
concurrency = worker
|
|
worker = context
|
|
context = null
|
|
}
|
|
|
|
function asyncWrapper (arg, cb) {
|
|
worker.call(this, arg)
|
|
.then(function (res) {
|
|
cb(null, res)
|
|
}, cb)
|
|
}
|
|
|
|
var queue = fastqueue(context, asyncWrapper, concurrency)
|
|
|
|
var pushCb = queue.push
|
|
var unshiftCb = queue.unshift
|
|
|
|
queue.push = push
|
|
queue.unshift = unshift
|
|
queue.drained = drained
|
|
|
|
return queue
|
|
|
|
function push (value) {
|
|
var p = new Promise(function (resolve, reject) {
|
|
pushCb(value, function (err, result) {
|
|
if (err) {
|
|
reject(err)
|
|
return
|
|
}
|
|
resolve(result)
|
|
})
|
|
})
|
|
|
|
// Let's fork the promise chain to
|
|
// make the error bubble up to the user but
|
|
// not lead to a unhandledRejection
|
|
p.catch(noop)
|
|
|
|
return p
|
|
}
|
|
|
|
function unshift (value) {
|
|
var p = new Promise(function (resolve, reject) {
|
|
unshiftCb(value, function (err, result) {
|
|
if (err) {
|
|
reject(err)
|
|
return
|
|
}
|
|
resolve(result)
|
|
})
|
|
})
|
|
|
|
// Let's fork the promise chain to
|
|
// make the error bubble up to the user but
|
|
// not lead to a unhandledRejection
|
|
p.catch(noop)
|
|
|
|
return p
|
|
}
|
|
|
|
function drained () {
|
|
var previousDrain = queue.drain
|
|
|
|
var p = new Promise(function (resolve) {
|
|
queue.drain = function () {
|
|
previousDrain()
|
|
resolve()
|
|
}
|
|
})
|
|
|
|
return p
|
|
}
|
|
}
|
|
|
|
module.exports = fastqueue
|
|
module.exports.promise = queueAsPromised
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6330:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
/*!
|
|
* fill-range <https://github.com/jonschlinkert/fill-range>
|
|
*
|
|
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
* Licensed under the MIT License.
|
|
*/
|
|
|
|
|
|
|
|
const util = __nccwpck_require__(3837);
|
|
const toRegexRange = __nccwpck_require__(1861);
|
|
|
|
const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
|
|
|
|
const transform = toNumber => {
|
|
return value => toNumber === true ? Number(value) : String(value);
|
|
};
|
|
|
|
const isValidValue = value => {
|
|
return typeof value === 'number' || (typeof value === 'string' && value !== '');
|
|
};
|
|
|
|
const isNumber = num => Number.isInteger(+num);
|
|
|
|
const zeros = input => {
|
|
let value = `${input}`;
|
|
let index = -1;
|
|
if (value[0] === '-') value = value.slice(1);
|
|
if (value === '0') return false;
|
|
while (value[++index] === '0');
|
|
return index > 0;
|
|
};
|
|
|
|
const stringify = (start, end, options) => {
|
|
if (typeof start === 'string' || typeof end === 'string') {
|
|
return true;
|
|
}
|
|
return options.stringify === true;
|
|
};
|
|
|
|
const pad = (input, maxLength, toNumber) => {
|
|
if (maxLength > 0) {
|
|
let dash = input[0] === '-' ? '-' : '';
|
|
if (dash) input = input.slice(1);
|
|
input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
|
|
}
|
|
if (toNumber === false) {
|
|
return String(input);
|
|
}
|
|
return input;
|
|
};
|
|
|
|
const toMaxLen = (input, maxLength) => {
|
|
let negative = input[0] === '-' ? '-' : '';
|
|
if (negative) {
|
|
input = input.slice(1);
|
|
maxLength--;
|
|
}
|
|
while (input.length < maxLength) input = '0' + input;
|
|
return negative ? ('-' + input) : input;
|
|
};
|
|
|
|
const toSequence = (parts, options) => {
|
|
parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
|
|
let prefix = options.capture ? '' : '?:';
|
|
let positives = '';
|
|
let negatives = '';
|
|
let result;
|
|
|
|
if (parts.positives.length) {
|
|
positives = parts.positives.join('|');
|
|
}
|
|
|
|
if (parts.negatives.length) {
|
|
negatives = `-(${prefix}${parts.negatives.join('|')})`;
|
|
}
|
|
|
|
if (positives && negatives) {
|
|
result = `${positives}|${negatives}`;
|
|
} else {
|
|
result = positives || negatives;
|
|
}
|
|
|
|
if (options.wrap) {
|
|
return `(${prefix}${result})`;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
const toRange = (a, b, isNumbers, options) => {
|
|
if (isNumbers) {
|
|
return toRegexRange(a, b, { wrap: false, ...options });
|
|
}
|
|
|
|
let start = String.fromCharCode(a);
|
|
if (a === b) return start;
|
|
|
|
let stop = String.fromCharCode(b);
|
|
return `[${start}-${stop}]`;
|
|
};
|
|
|
|
const toRegex = (start, end, options) => {
|
|
if (Array.isArray(start)) {
|
|
let wrap = options.wrap === true;
|
|
let prefix = options.capture ? '' : '?:';
|
|
return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
|
|
}
|
|
return toRegexRange(start, end, options);
|
|
};
|
|
|
|
const rangeError = (...args) => {
|
|
return new RangeError('Invalid range arguments: ' + util.inspect(...args));
|
|
};
|
|
|
|
const invalidRange = (start, end, options) => {
|
|
if (options.strictRanges === true) throw rangeError([start, end]);
|
|
return [];
|
|
};
|
|
|
|
const invalidStep = (step, options) => {
|
|
if (options.strictRanges === true) {
|
|
throw new TypeError(`Expected step "${step}" to be a number`);
|
|
}
|
|
return [];
|
|
};
|
|
|
|
const fillNumbers = (start, end, step = 1, options = {}) => {
|
|
let a = Number(start);
|
|
let b = Number(end);
|
|
|
|
if (!Number.isInteger(a) || !Number.isInteger(b)) {
|
|
if (options.strictRanges === true) throw rangeError([start, end]);
|
|
return [];
|
|
}
|
|
|
|
// fix negative zero
|
|
if (a === 0) a = 0;
|
|
if (b === 0) b = 0;
|
|
|
|
let descending = a > b;
|
|
let startString = String(start);
|
|
let endString = String(end);
|
|
let stepString = String(step);
|
|
step = Math.max(Math.abs(step), 1);
|
|
|
|
let padded = zeros(startString) || zeros(endString) || zeros(stepString);
|
|
let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
|
|
let toNumber = padded === false && stringify(start, end, options) === false;
|
|
let format = options.transform || transform(toNumber);
|
|
|
|
if (options.toRegex && step === 1) {
|
|
return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
|
|
}
|
|
|
|
let parts = { negatives: [], positives: [] };
|
|
let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
|
|
let range = [];
|
|
let index = 0;
|
|
|
|
while (descending ? a >= b : a <= b) {
|
|
if (options.toRegex === true && step > 1) {
|
|
push(a);
|
|
} else {
|
|
range.push(pad(format(a, index), maxLen, toNumber));
|
|
}
|
|
a = descending ? a - step : a + step;
|
|
index++;
|
|
}
|
|
|
|
if (options.toRegex === true) {
|
|
return step > 1
|
|
? toSequence(parts, options)
|
|
: toRegex(range, null, { wrap: false, ...options });
|
|
}
|
|
|
|
return range;
|
|
};
|
|
|
|
const fillLetters = (start, end, step = 1, options = {}) => {
|
|
if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
|
|
return invalidRange(start, end, options);
|
|
}
|
|
|
|
|
|
let format = options.transform || (val => String.fromCharCode(val));
|
|
let a = `${start}`.charCodeAt(0);
|
|
let b = `${end}`.charCodeAt(0);
|
|
|
|
let descending = a > b;
|
|
let min = Math.min(a, b);
|
|
let max = Math.max(a, b);
|
|
|
|
if (options.toRegex && step === 1) {
|
|
return toRange(min, max, false, options);
|
|
}
|
|
|
|
let range = [];
|
|
let index = 0;
|
|
|
|
while (descending ? a >= b : a <= b) {
|
|
range.push(format(a, index));
|
|
a = descending ? a - step : a + step;
|
|
index++;
|
|
}
|
|
|
|
if (options.toRegex === true) {
|
|
return toRegex(range, null, { wrap: false, options });
|
|
}
|
|
|
|
return range;
|
|
};
|
|
|
|
const fill = (start, end, step, options = {}) => {
|
|
if (end == null && isValidValue(start)) {
|
|
return [start];
|
|
}
|
|
|
|
if (!isValidValue(start) || !isValidValue(end)) {
|
|
return invalidRange(start, end, options);
|
|
}
|
|
|
|
if (typeof step === 'function') {
|
|
return fill(start, end, 1, { transform: step });
|
|
}
|
|
|
|
if (isObject(step)) {
|
|
return fill(start, end, 0, step);
|
|
}
|
|
|
|
let opts = { ...options };
|
|
if (opts.capture === true) opts.wrap = true;
|
|
step = step || opts.step || 1;
|
|
|
|
if (!isNumber(step)) {
|
|
if (step != null && !isObject(step)) return invalidStep(step, opts);
|
|
return fill(start, end, 1, step);
|
|
}
|
|
|
|
if (isNumber(start) && isNumber(end)) {
|
|
return fillNumbers(start, end, step, opts);
|
|
}
|
|
|
|
return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
|
|
};
|
|
|
|
module.exports = fill;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1585:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
|
|
|
|
module.exports = options => {
|
|
options = {...options};
|
|
|
|
const {array} = options;
|
|
let {encoding} = options;
|
|
const isBuffer = encoding === 'buffer';
|
|
let objectMode = false;
|
|
|
|
if (array) {
|
|
objectMode = !(encoding || isBuffer);
|
|
} else {
|
|
encoding = encoding || 'utf8';
|
|
}
|
|
|
|
if (isBuffer) {
|
|
encoding = null;
|
|
}
|
|
|
|
const stream = new PassThroughStream({objectMode});
|
|
|
|
if (encoding) {
|
|
stream.setEncoding(encoding);
|
|
}
|
|
|
|
let length = 0;
|
|
const chunks = [];
|
|
|
|
stream.on('data', chunk => {
|
|
chunks.push(chunk);
|
|
|
|
if (objectMode) {
|
|
length = chunks.length;
|
|
} else {
|
|
length += chunk.length;
|
|
}
|
|
});
|
|
|
|
stream.getBufferedValue = () => {
|
|
if (array) {
|
|
return chunks;
|
|
}
|
|
|
|
return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
|
|
};
|
|
|
|
stream.getBufferedLength = () => length;
|
|
|
|
return stream;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1766:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {constants: BufferConstants} = __nccwpck_require__(4300);
|
|
const stream = __nccwpck_require__(2781);
|
|
const {promisify} = __nccwpck_require__(3837);
|
|
const bufferStream = __nccwpck_require__(1585);
|
|
|
|
const streamPipelinePromisified = promisify(stream.pipeline);
|
|
|
|
class MaxBufferError extends Error {
|
|
constructor() {
|
|
super('maxBuffer exceeded');
|
|
this.name = 'MaxBufferError';
|
|
}
|
|
}
|
|
|
|
async function getStream(inputStream, options) {
|
|
if (!inputStream) {
|
|
throw new Error('Expected a stream');
|
|
}
|
|
|
|
options = {
|
|
maxBuffer: Infinity,
|
|
...options
|
|
};
|
|
|
|
const {maxBuffer} = options;
|
|
const stream = bufferStream(options);
|
|
|
|
await new Promise((resolve, reject) => {
|
|
const rejectPromise = error => {
|
|
// Don't retrieve an oversized buffer.
|
|
if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
|
|
error.bufferedData = stream.getBufferedValue();
|
|
}
|
|
|
|
reject(error);
|
|
};
|
|
|
|
(async () => {
|
|
try {
|
|
await streamPipelinePromisified(inputStream, stream);
|
|
resolve();
|
|
} catch (error) {
|
|
rejectPromise(error);
|
|
}
|
|
})();
|
|
|
|
stream.on('data', () => {
|
|
if (stream.getBufferedLength() > maxBuffer) {
|
|
rejectPromise(new MaxBufferError());
|
|
}
|
|
});
|
|
});
|
|
|
|
return stream.getBufferedValue();
|
|
}
|
|
|
|
module.exports = getStream;
|
|
module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
|
|
module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
|
|
module.exports.MaxBufferError = MaxBufferError;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1002:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
// rfc7231 6.1
|
|
const statusCodeCacheableByDefault = new Set([
|
|
200,
|
|
203,
|
|
204,
|
|
206,
|
|
300,
|
|
301,
|
|
404,
|
|
405,
|
|
410,
|
|
414,
|
|
501,
|
|
]);
|
|
|
|
// This implementation does not understand partial responses (206)
|
|
const understoodStatuses = new Set([
|
|
200,
|
|
203,
|
|
204,
|
|
300,
|
|
301,
|
|
302,
|
|
303,
|
|
307,
|
|
308,
|
|
404,
|
|
405,
|
|
410,
|
|
414,
|
|
501,
|
|
]);
|
|
|
|
const errorStatusCodes = new Set([
|
|
500,
|
|
502,
|
|
503,
|
|
504,
|
|
]);
|
|
|
|
const hopByHopHeaders = {
|
|
date: true, // included, because we add Age update Date
|
|
connection: true,
|
|
'keep-alive': true,
|
|
'proxy-authenticate': true,
|
|
'proxy-authorization': true,
|
|
te: true,
|
|
trailer: true,
|
|
'transfer-encoding': true,
|
|
upgrade: true,
|
|
};
|
|
|
|
const excludedFromRevalidationUpdate = {
|
|
// Since the old body is reused, it doesn't make sense to change properties of the body
|
|
'content-length': true,
|
|
'content-encoding': true,
|
|
'transfer-encoding': true,
|
|
'content-range': true,
|
|
};
|
|
|
|
function toNumberOrZero(s) {
|
|
const n = parseInt(s, 10);
|
|
return isFinite(n) ? n : 0;
|
|
}
|
|
|
|
// RFC 5861
|
|
function isErrorResponse(response) {
|
|
// consider undefined response as faulty
|
|
if(!response) {
|
|
return true
|
|
}
|
|
return errorStatusCodes.has(response.status);
|
|
}
|
|
|
|
function parseCacheControl(header) {
|
|
const cc = {};
|
|
if (!header) return cc;
|
|
|
|
// TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),
|
|
// the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale
|
|
const parts = header.trim().split(/\s*,\s*/); // TODO: lame parsing
|
|
for (const part of parts) {
|
|
const [k, v] = part.split(/\s*=\s*/, 2);
|
|
cc[k] = v === undefined ? true : v.replace(/^"|"$/g, ''); // TODO: lame unquoting
|
|
}
|
|
|
|
return cc;
|
|
}
|
|
|
|
function formatCacheControl(cc) {
|
|
let parts = [];
|
|
for (const k in cc) {
|
|
const v = cc[k];
|
|
parts.push(v === true ? k : k + '=' + v);
|
|
}
|
|
if (!parts.length) {
|
|
return undefined;
|
|
}
|
|
return parts.join(', ');
|
|
}
|
|
|
|
module.exports = class CachePolicy {
|
|
constructor(
|
|
req,
|
|
res,
|
|
{
|
|
shared,
|
|
cacheHeuristic,
|
|
immutableMinTimeToLive,
|
|
ignoreCargoCult,
|
|
_fromObject,
|
|
} = {}
|
|
) {
|
|
if (_fromObject) {
|
|
this._fromObject(_fromObject);
|
|
return;
|
|
}
|
|
|
|
if (!res || !res.headers) {
|
|
throw Error('Response headers missing');
|
|
}
|
|
this._assertRequestHasHeaders(req);
|
|
|
|
this._responseTime = this.now();
|
|
this._isShared = shared !== false;
|
|
this._cacheHeuristic =
|
|
undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE
|
|
this._immutableMinTtl =
|
|
undefined !== immutableMinTimeToLive
|
|
? immutableMinTimeToLive
|
|
: 24 * 3600 * 1000;
|
|
|
|
this._status = 'status' in res ? res.status : 200;
|
|
this._resHeaders = res.headers;
|
|
this._rescc = parseCacheControl(res.headers['cache-control']);
|
|
this._method = 'method' in req ? req.method : 'GET';
|
|
this._url = req.url;
|
|
this._host = req.headers.host;
|
|
this._noAuthorization = !req.headers.authorization;
|
|
this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used
|
|
this._reqcc = parseCacheControl(req.headers['cache-control']);
|
|
|
|
// Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,
|
|
// so there's no point stricly adhering to the blindly copy&pasted directives.
|
|
if (
|
|
ignoreCargoCult &&
|
|
'pre-check' in this._rescc &&
|
|
'post-check' in this._rescc
|
|
) {
|
|
delete this._rescc['pre-check'];
|
|
delete this._rescc['post-check'];
|
|
delete this._rescc['no-cache'];
|
|
delete this._rescc['no-store'];
|
|
delete this._rescc['must-revalidate'];
|
|
this._resHeaders = Object.assign({}, this._resHeaders, {
|
|
'cache-control': formatCacheControl(this._rescc),
|
|
});
|
|
delete this._resHeaders.expires;
|
|
delete this._resHeaders.pragma;
|
|
}
|
|
|
|
// When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive
|
|
// as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1).
|
|
if (
|
|
res.headers['cache-control'] == null &&
|
|
/no-cache/.test(res.headers.pragma)
|
|
) {
|
|
this._rescc['no-cache'] = true;
|
|
}
|
|
}
|
|
|
|
now() {
|
|
return Date.now();
|
|
}
|
|
|
|
storable() {
|
|
// The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.
|
|
return !!(
|
|
!this._reqcc['no-store'] &&
|
|
// A cache MUST NOT store a response to any request, unless:
|
|
// The request method is understood by the cache and defined as being cacheable, and
|
|
('GET' === this._method ||
|
|
'HEAD' === this._method ||
|
|
('POST' === this._method && this._hasExplicitExpiration())) &&
|
|
// the response status code is understood by the cache, and
|
|
understoodStatuses.has(this._status) &&
|
|
// the "no-store" cache directive does not appear in request or response header fields, and
|
|
!this._rescc['no-store'] &&
|
|
// the "private" response directive does not appear in the response, if the cache is shared, and
|
|
(!this._isShared || !this._rescc.private) &&
|
|
// the Authorization header field does not appear in the request, if the cache is shared,
|
|
(!this._isShared ||
|
|
this._noAuthorization ||
|
|
this._allowsStoringAuthenticated()) &&
|
|
// the response either:
|
|
// contains an Expires header field, or
|
|
(this._resHeaders.expires ||
|
|
// contains a max-age response directive, or
|
|
// contains a s-maxage response directive and the cache is shared, or
|
|
// contains a public response directive.
|
|
this._rescc['max-age'] ||
|
|
(this._isShared && this._rescc['s-maxage']) ||
|
|
this._rescc.public ||
|
|
// has a status code that is defined as cacheable by default
|
|
statusCodeCacheableByDefault.has(this._status))
|
|
);
|
|
}
|
|
|
|
_hasExplicitExpiration() {
|
|
// 4.2.1 Calculating Freshness Lifetime
|
|
return (
|
|
(this._isShared && this._rescc['s-maxage']) ||
|
|
this._rescc['max-age'] ||
|
|
this._resHeaders.expires
|
|
);
|
|
}
|
|
|
|
_assertRequestHasHeaders(req) {
|
|
if (!req || !req.headers) {
|
|
throw Error('Request headers missing');
|
|
}
|
|
}
|
|
|
|
satisfiesWithoutRevalidation(req) {
|
|
this._assertRequestHasHeaders(req);
|
|
|
|
// When presented with a request, a cache MUST NOT reuse a stored response, unless:
|
|
// the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,
|
|
// unless the stored response is successfully validated (Section 4.3), and
|
|
const requestCC = parseCacheControl(req.headers['cache-control']);
|
|
if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {
|
|
return false;
|
|
}
|
|
|
|
if (requestCC['max-age'] && this.age() > requestCC['max-age']) {
|
|
return false;
|
|
}
|
|
|
|
if (
|
|
requestCC['min-fresh'] &&
|
|
this.timeToLive() < 1000 * requestCC['min-fresh']
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
// the stored response is either:
|
|
// fresh, or allowed to be served stale
|
|
if (this.stale()) {
|
|
const allowsStale =
|
|
requestCC['max-stale'] &&
|
|
!this._rescc['must-revalidate'] &&
|
|
(true === requestCC['max-stale'] ||
|
|
requestCC['max-stale'] > this.age() - this.maxAge());
|
|
if (!allowsStale) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return this._requestMatches(req, false);
|
|
}
|
|
|
|
_requestMatches(req, allowHeadMethod) {
|
|
// The presented effective request URI and that of the stored response match, and
|
|
return (
|
|
(!this._url || this._url === req.url) &&
|
|
this._host === req.headers.host &&
|
|
// the request method associated with the stored response allows it to be used for the presented request, and
|
|
(!req.method ||
|
|
this._method === req.method ||
|
|
(allowHeadMethod && 'HEAD' === req.method)) &&
|
|
// selecting header fields nominated by the stored response (if any) match those presented, and
|
|
this._varyMatches(req)
|
|
);
|
|
}
|
|
|
|
_allowsStoringAuthenticated() {
|
|
// following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.
|
|
return (
|
|
this._rescc['must-revalidate'] ||
|
|
this._rescc.public ||
|
|
this._rescc['s-maxage']
|
|
);
|
|
}
|
|
|
|
_varyMatches(req) {
|
|
if (!this._resHeaders.vary) {
|
|
return true;
|
|
}
|
|
|
|
// A Vary header field-value of "*" always fails to match
|
|
if (this._resHeaders.vary === '*') {
|
|
return false;
|
|
}
|
|
|
|
const fields = this._resHeaders.vary
|
|
.trim()
|
|
.toLowerCase()
|
|
.split(/\s*,\s*/);
|
|
for (const name of fields) {
|
|
if (req.headers[name] !== this._reqHeaders[name]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
_copyWithoutHopByHopHeaders(inHeaders) {
|
|
const headers = {};
|
|
for (const name in inHeaders) {
|
|
if (hopByHopHeaders[name]) continue;
|
|
headers[name] = inHeaders[name];
|
|
}
|
|
// 9.1. Connection
|
|
if (inHeaders.connection) {
|
|
const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
|
|
for (const name of tokens) {
|
|
delete headers[name];
|
|
}
|
|
}
|
|
if (headers.warning) {
|
|
const warnings = headers.warning.split(/,/).filter(warning => {
|
|
return !/^\s*1[0-9][0-9]/.test(warning);
|
|
});
|
|
if (!warnings.length) {
|
|
delete headers.warning;
|
|
} else {
|
|
headers.warning = warnings.join(',').trim();
|
|
}
|
|
}
|
|
return headers;
|
|
}
|
|
|
|
responseHeaders() {
|
|
const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
|
|
const age = this.age();
|
|
|
|
// A cache SHOULD generate 113 warning if it heuristically chose a freshness
|
|
// lifetime greater than 24 hours and the response's age is greater than 24 hours.
|
|
if (
|
|
age > 3600 * 24 &&
|
|
!this._hasExplicitExpiration() &&
|
|
this.maxAge() > 3600 * 24
|
|
) {
|
|
headers.warning =
|
|
(headers.warning ? `${headers.warning}, ` : '') +
|
|
'113 - "rfc7234 5.5.4"';
|
|
}
|
|
headers.age = `${Math.round(age)}`;
|
|
headers.date = new Date(this.now()).toUTCString();
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* Value of the Date response header or current time if Date was invalid
|
|
* @return timestamp
|
|
*/
|
|
date() {
|
|
const serverDate = Date.parse(this._resHeaders.date);
|
|
if (isFinite(serverDate)) {
|
|
return serverDate;
|
|
}
|
|
return this._responseTime;
|
|
}
|
|
|
|
/**
|
|
* Value of the Age header, in seconds, updated for the current time.
|
|
* May be fractional.
|
|
*
|
|
* @return Number
|
|
*/
|
|
age() {
|
|
let age = this._ageValue();
|
|
|
|
const residentTime = (this.now() - this._responseTime) / 1000;
|
|
return age + residentTime;
|
|
}
|
|
|
|
_ageValue() {
|
|
return toNumberOrZero(this._resHeaders.age);
|
|
}
|
|
|
|
/**
|
|
* Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.
|
|
*
|
|
* For an up-to-date value, see `timeToLive()`.
|
|
*
|
|
* @return Number
|
|
*/
|
|
maxAge() {
|
|
if (!this.storable() || this._rescc['no-cache']) {
|
|
return 0;
|
|
}
|
|
|
|
// Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default
|
|
// so this implementation requires explicit opt-in via public header
|
|
if (
|
|
this._isShared &&
|
|
(this._resHeaders['set-cookie'] &&
|
|
!this._rescc.public &&
|
|
!this._rescc.immutable)
|
|
) {
|
|
return 0;
|
|
}
|
|
|
|
if (this._resHeaders.vary === '*') {
|
|
return 0;
|
|
}
|
|
|
|
if (this._isShared) {
|
|
if (this._rescc['proxy-revalidate']) {
|
|
return 0;
|
|
}
|
|
// if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.
|
|
if (this._rescc['s-maxage']) {
|
|
return toNumberOrZero(this._rescc['s-maxage']);
|
|
}
|
|
}
|
|
|
|
// If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.
|
|
if (this._rescc['max-age']) {
|
|
return toNumberOrZero(this._rescc['max-age']);
|
|
}
|
|
|
|
const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;
|
|
|
|
const serverDate = this.date();
|
|
if (this._resHeaders.expires) {
|
|
const expires = Date.parse(this._resHeaders.expires);
|
|
// A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
|
|
if (Number.isNaN(expires) || expires < serverDate) {
|
|
return 0;
|
|
}
|
|
return Math.max(defaultMinTtl, (expires - serverDate) / 1000);
|
|
}
|
|
|
|
if (this._resHeaders['last-modified']) {
|
|
const lastModified = Date.parse(this._resHeaders['last-modified']);
|
|
if (isFinite(lastModified) && serverDate > lastModified) {
|
|
return Math.max(
|
|
defaultMinTtl,
|
|
((serverDate - lastModified) / 1000) * this._cacheHeuristic
|
|
);
|
|
}
|
|
}
|
|
|
|
return defaultMinTtl;
|
|
}
|
|
|
|
timeToLive() {
|
|
const age = this.maxAge() - this.age();
|
|
const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);
|
|
const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);
|
|
return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;
|
|
}
|
|
|
|
stale() {
|
|
return this.maxAge() <= this.age();
|
|
}
|
|
|
|
_useStaleIfError() {
|
|
return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();
|
|
}
|
|
|
|
useStaleWhileRevalidate() {
|
|
return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();
|
|
}
|
|
|
|
static fromObject(obj) {
|
|
return new this(undefined, undefined, { _fromObject: obj });
|
|
}
|
|
|
|
_fromObject(obj) {
|
|
if (this._responseTime) throw Error('Reinitialized');
|
|
if (!obj || obj.v !== 1) throw Error('Invalid serialization');
|
|
|
|
this._responseTime = obj.t;
|
|
this._isShared = obj.sh;
|
|
this._cacheHeuristic = obj.ch;
|
|
this._immutableMinTtl =
|
|
obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;
|
|
this._status = obj.st;
|
|
this._resHeaders = obj.resh;
|
|
this._rescc = obj.rescc;
|
|
this._method = obj.m;
|
|
this._url = obj.u;
|
|
this._host = obj.h;
|
|
this._noAuthorization = obj.a;
|
|
this._reqHeaders = obj.reqh;
|
|
this._reqcc = obj.reqcc;
|
|
}
|
|
|
|
toObject() {
|
|
return {
|
|
v: 1,
|
|
t: this._responseTime,
|
|
sh: this._isShared,
|
|
ch: this._cacheHeuristic,
|
|
imm: this._immutableMinTtl,
|
|
st: this._status,
|
|
resh: this._resHeaders,
|
|
rescc: this._rescc,
|
|
m: this._method,
|
|
u: this._url,
|
|
h: this._host,
|
|
a: this._noAuthorization,
|
|
reqh: this._reqHeaders,
|
|
reqcc: this._reqcc,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Headers for sending to the origin server to revalidate stale response.
|
|
* Allows server to return 304 to allow reuse of the previous response.
|
|
*
|
|
* Hop by hop headers are always stripped.
|
|
* Revalidation headers may be added or removed, depending on request.
|
|
*/
|
|
revalidationHeaders(incomingReq) {
|
|
this._assertRequestHasHeaders(incomingReq);
|
|
const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);
|
|
|
|
// This implementation does not understand range requests
|
|
delete headers['if-range'];
|
|
|
|
if (!this._requestMatches(incomingReq, true) || !this.storable()) {
|
|
// revalidation allowed via HEAD
|
|
// not for the same resource, or wasn't allowed to be cached anyway
|
|
delete headers['if-none-match'];
|
|
delete headers['if-modified-since'];
|
|
return headers;
|
|
}
|
|
|
|
/* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */
|
|
if (this._resHeaders.etag) {
|
|
headers['if-none-match'] = headers['if-none-match']
|
|
? `${headers['if-none-match']}, ${this._resHeaders.etag}`
|
|
: this._resHeaders.etag;
|
|
}
|
|
|
|
// Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.
|
|
const forbidsWeakValidators =
|
|
headers['accept-ranges'] ||
|
|
headers['if-match'] ||
|
|
headers['if-unmodified-since'] ||
|
|
(this._method && this._method != 'GET');
|
|
|
|
/* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.
|
|
Note: This implementation does not understand partial responses (206) */
|
|
if (forbidsWeakValidators) {
|
|
delete headers['if-modified-since'];
|
|
|
|
if (headers['if-none-match']) {
|
|
const etags = headers['if-none-match']
|
|
.split(/,/)
|
|
.filter(etag => {
|
|
return !/^\s*W\//.test(etag);
|
|
});
|
|
if (!etags.length) {
|
|
delete headers['if-none-match'];
|
|
} else {
|
|
headers['if-none-match'] = etags.join(',').trim();
|
|
}
|
|
}
|
|
} else if (
|
|
this._resHeaders['last-modified'] &&
|
|
!headers['if-modified-since']
|
|
) {
|
|
headers['if-modified-since'] = this._resHeaders['last-modified'];
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* Creates new CachePolicy with information combined from the previews response,
|
|
* and the new revalidation response.
|
|
*
|
|
* Returns {policy, modified} where modified is a boolean indicating
|
|
* whether the response body has been modified, and old cached body can't be used.
|
|
*
|
|
* @return {Object} {policy: CachePolicy, modified: Boolean}
|
|
*/
|
|
revalidatedPolicy(request, response) {
|
|
this._assertRequestHasHeaders(request);
|
|
if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful
|
|
return {
|
|
modified: false,
|
|
matches: false,
|
|
policy: this,
|
|
};
|
|
}
|
|
if (!response || !response.headers) {
|
|
throw Error('Response headers missing');
|
|
}
|
|
|
|
// These aren't going to be supported exactly, since one CachePolicy object
|
|
// doesn't know about all the other cached objects.
|
|
let matches = false;
|
|
if (response.status !== undefined && response.status != 304) {
|
|
matches = false;
|
|
} else if (
|
|
response.headers.etag &&
|
|
!/^\s*W\//.test(response.headers.etag)
|
|
) {
|
|
// "All of the stored responses with the same strong validator are selected.
|
|
// If none of the stored responses contain the same strong validator,
|
|
// then the cache MUST NOT use the new response to update any stored responses."
|
|
matches =
|
|
this._resHeaders.etag &&
|
|
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
|
response.headers.etag;
|
|
} else if (this._resHeaders.etag && response.headers.etag) {
|
|
// "If the new response contains a weak validator and that validator corresponds
|
|
// to one of the cache's stored responses,
|
|
// then the most recent of those matching stored responses is selected for update."
|
|
matches =
|
|
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
|
response.headers.etag.replace(/^\s*W\//, '');
|
|
} else if (this._resHeaders['last-modified']) {
|
|
matches =
|
|
this._resHeaders['last-modified'] ===
|
|
response.headers['last-modified'];
|
|
} else {
|
|
// If the new response does not include any form of validator (such as in the case where
|
|
// a client generates an If-Modified-Since request from a source other than the Last-Modified
|
|
// response header field), and there is only one stored response, and that stored response also
|
|
// lacks a validator, then that stored response is selected for update.
|
|
if (
|
|
!this._resHeaders.etag &&
|
|
!this._resHeaders['last-modified'] &&
|
|
!response.headers.etag &&
|
|
!response.headers['last-modified']
|
|
) {
|
|
matches = true;
|
|
}
|
|
}
|
|
|
|
if (!matches) {
|
|
return {
|
|
policy: new this.constructor(request, response),
|
|
// Client receiving 304 without body, even if it's invalid/mismatched has no option
|
|
// but to reuse a cached body. We don't have a good way to tell clients to do
|
|
// error recovery in such case.
|
|
modified: response.status != 304,
|
|
matches: false,
|
|
};
|
|
}
|
|
|
|
// use other header fields provided in the 304 (Not Modified) response to replace all instances
|
|
// of the corresponding header fields in the stored response.
|
|
const headers = {};
|
|
for (const k in this._resHeaders) {
|
|
headers[k] =
|
|
k in response.headers && !excludedFromRevalidationUpdate[k]
|
|
? response.headers[k]
|
|
: this._resHeaders[k];
|
|
}
|
|
|
|
const newResponse = Object.assign({}, response, {
|
|
status: this._status,
|
|
method: this._method,
|
|
headers,
|
|
});
|
|
return {
|
|
policy: new this.constructor(request, newResponse, {
|
|
shared: this._isShared,
|
|
cacheHeuristic: this._cacheHeuristic,
|
|
immutableMinTimeToLive: this._immutableMinTtl,
|
|
}),
|
|
modified: false,
|
|
matches: true,
|
|
};
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9898:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
// See https://github.com/facebook/jest/issues/2549
|
|
// eslint-disable-next-line node/prefer-global/url
|
|
const {URL} = __nccwpck_require__(7310);
|
|
const EventEmitter = __nccwpck_require__(2361);
|
|
const tls = __nccwpck_require__(4404);
|
|
const http2 = __nccwpck_require__(5158);
|
|
const QuickLRU = __nccwpck_require__(9273);
|
|
const delayAsyncDestroy = __nccwpck_require__(9237);
|
|
|
|
const kCurrentStreamCount = Symbol('currentStreamCount');
|
|
const kRequest = Symbol('request');
|
|
const kOriginSet = Symbol('cachedOriginSet');
|
|
const kGracefullyClosing = Symbol('gracefullyClosing');
|
|
const kLength = Symbol('length');
|
|
|
|
const nameKeys = [
|
|
// Not an Agent option actually
|
|
'createConnection',
|
|
|
|
// `http2.connect()` options
|
|
'maxDeflateDynamicTableSize',
|
|
'maxSettings',
|
|
'maxSessionMemory',
|
|
'maxHeaderListPairs',
|
|
'maxOutstandingPings',
|
|
'maxReservedRemoteStreams',
|
|
'maxSendHeaderBlockLength',
|
|
'paddingStrategy',
|
|
'peerMaxConcurrentStreams',
|
|
'settings',
|
|
|
|
// `tls.connect()` source options
|
|
'family',
|
|
'localAddress',
|
|
'rejectUnauthorized',
|
|
|
|
// `tls.connect()` secure context options
|
|
'pskCallback',
|
|
'minDHSize',
|
|
|
|
// `tls.connect()` destination options
|
|
// - `servername` is automatically validated, skip it
|
|
// - `host` and `port` just describe the destination server,
|
|
'path',
|
|
'socket',
|
|
|
|
// `tls.createSecureContext()` options
|
|
'ca',
|
|
'cert',
|
|
'sigalgs',
|
|
'ciphers',
|
|
'clientCertEngine',
|
|
'crl',
|
|
'dhparam',
|
|
'ecdhCurve',
|
|
'honorCipherOrder',
|
|
'key',
|
|
'privateKeyEngine',
|
|
'privateKeyIdentifier',
|
|
'maxVersion',
|
|
'minVersion',
|
|
'pfx',
|
|
'secureOptions',
|
|
'secureProtocol',
|
|
'sessionIdContext',
|
|
'ticketKeys'
|
|
];
|
|
|
|
const getSortedIndex = (array, value, compare) => {
|
|
let low = 0;
|
|
let high = array.length;
|
|
|
|
while (low < high) {
|
|
const mid = (low + high) >>> 1;
|
|
|
|
if (compare(array[mid], value)) {
|
|
low = mid + 1;
|
|
} else {
|
|
high = mid;
|
|
}
|
|
}
|
|
|
|
return low;
|
|
};
|
|
|
|
const compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
|
|
|
|
// See https://tools.ietf.org/html/rfc8336
|
|
const closeCoveredSessions = (where, session) => {
|
|
// Clients SHOULD NOT emit new requests on any connection whose Origin
|
|
// Set is a proper subset of another connection's Origin Set, and they
|
|
// SHOULD close it once all outstanding requests are satisfied.
|
|
for (let index = 0; index < where.length; index++) {
|
|
const coveredSession = where[index];
|
|
|
|
if (
|
|
// Unfortunately `.every()` returns true for an empty array
|
|
coveredSession[kOriginSet].length > 0
|
|
|
|
// The set is a proper subset when its length is less than the other set.
|
|
&& coveredSession[kOriginSet].length < session[kOriginSet].length
|
|
|
|
// And the other set includes all elements of the subset.
|
|
&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
|
|
|
|
// Makes sure that the session can handle all requests from the covered session.
|
|
&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
|
|
) {
|
|
// This allows pending requests to finish and prevents making new requests.
|
|
gracefullyClose(coveredSession);
|
|
}
|
|
}
|
|
};
|
|
|
|
// This is basically inverted `closeCoveredSessions(...)`.
|
|
const closeSessionIfCovered = (where, coveredSession) => {
|
|
for (let index = 0; index < where.length; index++) {
|
|
const session = where[index];
|
|
|
|
if (
|
|
coveredSession[kOriginSet].length > 0
|
|
&& coveredSession[kOriginSet].length < session[kOriginSet].length
|
|
&& coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
|
|
&& (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
|
|
) {
|
|
gracefullyClose(coveredSession);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
const gracefullyClose = session => {
|
|
session[kGracefullyClosing] = true;
|
|
|
|
if (session[kCurrentStreamCount] === 0) {
|
|
session.close();
|
|
}
|
|
};
|
|
|
|
class Agent extends EventEmitter {
|
|
constructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {
|
|
super();
|
|
|
|
// SESSIONS[NORMALIZED_OPTIONS] = [];
|
|
this.sessions = {};
|
|
|
|
// The queue for creating new sessions. It looks like this:
|
|
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
|
|
//
|
|
// It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster.
|
|
// I guess object creation / deletion is causing the slowdown.
|
|
//
|
|
// The entry function has `listeners`, `completed` and `destroyed` properties.
|
|
// `listeners` is an array of objects containing `resolve` and `reject` functions.
|
|
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
|
|
// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.
|
|
this.queue = {};
|
|
|
|
// Each session will use this timeout value.
|
|
this.timeout = timeout;
|
|
|
|
// Max sessions in total
|
|
this.maxSessions = maxSessions;
|
|
|
|
// Max empty sessions in total
|
|
this.maxEmptySessions = maxEmptySessions;
|
|
|
|
this._emptySessionCount = 0;
|
|
this._sessionCount = 0;
|
|
|
|
// We don't support push streams by default.
|
|
this.settings = {
|
|
enablePush: false,
|
|
initialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426
|
|
};
|
|
|
|
// Reusing TLS sessions increases performance.
|
|
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
|
|
}
|
|
|
|
get protocol() {
|
|
return 'https:';
|
|
}
|
|
|
|
normalizeOptions(options) {
|
|
let normalized = '';
|
|
|
|
for (let index = 0; index < nameKeys.length; index++) {
|
|
const key = nameKeys[index];
|
|
|
|
normalized += ':';
|
|
|
|
if (options && options[key] !== undefined) {
|
|
normalized += options[key];
|
|
}
|
|
}
|
|
|
|
return normalized;
|
|
}
|
|
|
|
_processQueue() {
|
|
if (this._sessionCount >= this.maxSessions) {
|
|
this.closeEmptySessions(this.maxSessions - this._sessionCount + 1);
|
|
return;
|
|
}
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const normalizedOptions in this.queue) {
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const normalizedOrigin in this.queue[normalizedOptions]) {
|
|
const item = this.queue[normalizedOptions][normalizedOrigin];
|
|
|
|
// The entry function can be run only once.
|
|
if (!item.completed) {
|
|
item.completed = true;
|
|
|
|
item();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
_isBetterSession(thisStreamCount, thatStreamCount) {
|
|
return thisStreamCount > thatStreamCount;
|
|
}
|
|
|
|
_accept(session, listeners, normalizedOrigin, options) {
|
|
let index = 0;
|
|
|
|
while (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) {
|
|
// We assume `resolve(...)` calls `request(...)` *directly*,
|
|
// otherwise the session will get overloaded.
|
|
listeners[index].resolve(session);
|
|
|
|
index++;
|
|
}
|
|
|
|
listeners.splice(0, index);
|
|
|
|
if (listeners.length > 0) {
|
|
this.getSession(normalizedOrigin, options, listeners);
|
|
listeners.length = 0;
|
|
}
|
|
}
|
|
|
|
getSession(origin, options, listeners) {
|
|
return new Promise((resolve, reject) => {
|
|
if (Array.isArray(listeners) && listeners.length > 0) {
|
|
listeners = [...listeners];
|
|
|
|
// Resolve the current promise ASAP, we're just moving the listeners.
|
|
// They will be executed at a different time.
|
|
resolve();
|
|
} else {
|
|
listeners = [{resolve, reject}];
|
|
}
|
|
|
|
try {
|
|
// Parse origin
|
|
if (typeof origin === 'string') {
|
|
origin = new URL(origin);
|
|
} else if (!(origin instanceof URL)) {
|
|
throw new TypeError('The `origin` argument needs to be a string or an URL object');
|
|
}
|
|
|
|
if (options) {
|
|
// Validate servername
|
|
const {servername} = options;
|
|
const {hostname} = origin;
|
|
if (servername && hostname !== servername) {
|
|
throw new Error(`Origin ${hostname} differs from servername ${servername}`);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
const normalizedOptions = this.normalizeOptions(options);
|
|
const normalizedOrigin = origin.origin;
|
|
|
|
if (normalizedOptions in this.sessions) {
|
|
const sessions = this.sessions[normalizedOptions];
|
|
|
|
let maxConcurrentStreams = -1;
|
|
let currentStreamsCount = -1;
|
|
let optimalSession;
|
|
|
|
// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.
|
|
// Additionally, we are looking for session which has biggest current pending streams count.
|
|
//
|
|
// |------------| |------------| |------------| |------------|
|
|
// | Session: A | | Session: B | | Session: C | | Session: D |
|
|
// | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 |
|
|
// | Max: 10 | | Max: 10 | | Max: 9 | | Max: 5 |
|
|
// |------------| |------------| |------------| |------------|
|
|
// ^
|
|
// |
|
|
// pick this one --
|
|
//
|
|
for (let index = 0; index < sessions.length; index++) {
|
|
const session = sessions[index];
|
|
|
|
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
|
|
|
|
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
|
|
break;
|
|
}
|
|
|
|
if (!session[kOriginSet].includes(normalizedOrigin)) {
|
|
continue;
|
|
}
|
|
|
|
const sessionCurrentStreamsCount = session[kCurrentStreamCount];
|
|
|
|
if (
|
|
sessionCurrentStreamsCount >= sessionMaxConcurrentStreams
|
|
|| session[kGracefullyClosing]
|
|
// Unfortunately the `close` event isn't called immediately,
|
|
// so `session.destroyed` is `true`, but `session.closed` is `false`.
|
|
|| session.destroyed
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
// We only need set this once.
|
|
if (!optimalSession) {
|
|
maxConcurrentStreams = sessionMaxConcurrentStreams;
|
|
}
|
|
|
|
// Either get the session which has biggest current stream count or the lowest.
|
|
if (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) {
|
|
optimalSession = session;
|
|
currentStreamsCount = sessionCurrentStreamsCount;
|
|
}
|
|
}
|
|
|
|
if (optimalSession) {
|
|
this._accept(optimalSession, listeners, normalizedOrigin, options);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (normalizedOptions in this.queue) {
|
|
if (normalizedOrigin in this.queue[normalizedOptions]) {
|
|
// There's already an item in the queue, just attach ourselves to it.
|
|
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
|
|
return;
|
|
}
|
|
} else {
|
|
this.queue[normalizedOptions] = {
|
|
[kLength]: 0
|
|
};
|
|
}
|
|
|
|
// The entry must be removed from the queue IMMEDIATELY when:
|
|
// 1. the session connects successfully,
|
|
// 2. an error occurs.
|
|
const removeFromQueue = () => {
|
|
// Our entry can be replaced. We cannot remove the new one.
|
|
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
|
|
delete this.queue[normalizedOptions][normalizedOrigin];
|
|
|
|
if (--this.queue[normalizedOptions][kLength] === 0) {
|
|
delete this.queue[normalizedOptions];
|
|
}
|
|
}
|
|
};
|
|
|
|
// The main logic is here
|
|
const entry = async () => {
|
|
this._sessionCount++;
|
|
|
|
const name = `${normalizedOrigin}:${normalizedOptions}`;
|
|
let receivedSettings = false;
|
|
let socket;
|
|
|
|
try {
|
|
const computedOptions = {...options};
|
|
|
|
if (computedOptions.settings === undefined) {
|
|
computedOptions.settings = this.settings;
|
|
}
|
|
|
|
if (computedOptions.session === undefined) {
|
|
computedOptions.session = this.tlsSessionCache.get(name);
|
|
}
|
|
|
|
const createConnection = computedOptions.createConnection || this.createConnection;
|
|
|
|
// A hacky workaround to enable async `createConnection`
|
|
socket = await createConnection.call(this, origin, computedOptions);
|
|
computedOptions.createConnection = () => socket;
|
|
|
|
const session = http2.connect(origin, computedOptions);
|
|
session[kCurrentStreamCount] = 0;
|
|
session[kGracefullyClosing] = false;
|
|
|
|
// Node.js return https://false:443 instead of https://1.1.1.1:443
|
|
const getOriginSet = () => {
|
|
const {socket} = session;
|
|
|
|
let originSet;
|
|
if (socket.servername === false) {
|
|
socket.servername = socket.remoteAddress;
|
|
originSet = session.originSet;
|
|
socket.servername = false;
|
|
} else {
|
|
originSet = session.originSet;
|
|
}
|
|
|
|
return originSet;
|
|
};
|
|
|
|
const isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;
|
|
|
|
session.socket.once('session', tlsSession => {
|
|
this.tlsSessionCache.set(name, tlsSession);
|
|
});
|
|
|
|
session.once('error', error => {
|
|
// Listeners are empty when the session successfully connected.
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
|
|
// The connection got broken, purge the cache.
|
|
this.tlsSessionCache.delete(name);
|
|
});
|
|
|
|
session.setTimeout(this.timeout, () => {
|
|
// Terminates all streams owned by this session.
|
|
session.destroy();
|
|
});
|
|
|
|
session.once('close', () => {
|
|
this._sessionCount--;
|
|
|
|
if (receivedSettings) {
|
|
// Assumes session `close` is emitted after request `close`
|
|
this._emptySessionCount--;
|
|
|
|
// This cannot be moved to the stream logic,
|
|
// because there may be a session that hadn't made a single request.
|
|
const where = this.sessions[normalizedOptions];
|
|
|
|
if (where.length === 1) {
|
|
delete this.sessions[normalizedOptions];
|
|
} else {
|
|
where.splice(where.indexOf(session), 1);
|
|
}
|
|
} else {
|
|
// Broken connection
|
|
removeFromQueue();
|
|
|
|
const error = new Error('Session closed without receiving a SETTINGS frame');
|
|
error.code = 'HTTP2WRAPPER_NOSETTINGS';
|
|
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
}
|
|
|
|
// There may be another session awaiting.
|
|
this._processQueue();
|
|
});
|
|
|
|
// Iterates over the queue and processes listeners.
|
|
const processListeners = () => {
|
|
const queue = this.queue[normalizedOptions];
|
|
if (!queue) {
|
|
return;
|
|
}
|
|
|
|
const originSet = session[kOriginSet];
|
|
|
|
for (let index = 0; index < originSet.length; index++) {
|
|
const origin = originSet[index];
|
|
|
|
if (origin in queue) {
|
|
const {listeners, completed} = queue[origin];
|
|
|
|
let index = 0;
|
|
|
|
// Prevents session overloading.
|
|
while (index < listeners.length && isFree()) {
|
|
// We assume `resolve(...)` calls `request(...)` *directly*,
|
|
// otherwise the session will get overloaded.
|
|
listeners[index].resolve(session);
|
|
|
|
index++;
|
|
}
|
|
|
|
queue[origin].listeners.splice(0, index);
|
|
|
|
if (queue[origin].listeners.length === 0 && !completed) {
|
|
delete queue[origin];
|
|
|
|
if (--queue[kLength] === 0) {
|
|
delete this.queue[normalizedOptions];
|
|
break;
|
|
}
|
|
}
|
|
|
|
// We're no longer free, no point in continuing.
|
|
if (!isFree()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
|
|
session.on('origin', () => {
|
|
session[kOriginSet] = getOriginSet() || [];
|
|
session[kGracefullyClosing] = false;
|
|
closeSessionIfCovered(this.sessions[normalizedOptions], session);
|
|
|
|
if (session[kGracefullyClosing] || !isFree()) {
|
|
return;
|
|
}
|
|
|
|
processListeners();
|
|
|
|
if (!isFree()) {
|
|
return;
|
|
}
|
|
|
|
// Close covered sessions (if possible).
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
});
|
|
|
|
session.once('remoteSettings', () => {
|
|
// The Agent could have been destroyed already.
|
|
if (entry.destroyed) {
|
|
const error = new Error('Agent has been destroyed');
|
|
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
|
|
session.destroy();
|
|
return;
|
|
}
|
|
|
|
// See https://github.com/nodejs/node/issues/38426
|
|
if (session.setLocalWindowSize) {
|
|
session.setLocalWindowSize(1024 * 1024 * 4); // 4 MB
|
|
}
|
|
|
|
session[kOriginSet] = getOriginSet() || [];
|
|
|
|
if (session.socket.encrypted) {
|
|
const mainOrigin = session[kOriginSet][0];
|
|
if (mainOrigin !== normalizedOrigin) {
|
|
const error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);
|
|
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
|
|
session.destroy();
|
|
return;
|
|
}
|
|
}
|
|
|
|
removeFromQueue();
|
|
|
|
{
|
|
const where = this.sessions;
|
|
|
|
if (normalizedOptions in where) {
|
|
const sessions = where[normalizedOptions];
|
|
sessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session);
|
|
} else {
|
|
where[normalizedOptions] = [session];
|
|
}
|
|
}
|
|
|
|
receivedSettings = true;
|
|
this._emptySessionCount++;
|
|
|
|
this.emit('session', session);
|
|
this._accept(session, listeners, normalizedOrigin, options);
|
|
|
|
if (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {
|
|
this.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);
|
|
}
|
|
|
|
// `session.remoteSettings.maxConcurrentStreams` might get increased
|
|
session.on('remoteSettings', () => {
|
|
if (!isFree()) {
|
|
return;
|
|
}
|
|
|
|
processListeners();
|
|
|
|
if (!isFree()) {
|
|
return;
|
|
}
|
|
|
|
// In case the Origin Set changes
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
});
|
|
});
|
|
|
|
// Shim `session.request()` in order to catch all streams
|
|
session[kRequest] = session.request;
|
|
session.request = (headers, streamOptions) => {
|
|
if (session[kGracefullyClosing]) {
|
|
throw new Error('The session is gracefully closing. No new streams are allowed.');
|
|
}
|
|
|
|
const stream = session[kRequest](headers, streamOptions);
|
|
|
|
// The process won't exit until the session is closed or all requests are gone.
|
|
session.ref();
|
|
|
|
if (session[kCurrentStreamCount]++ === 0) {
|
|
this._emptySessionCount--;
|
|
}
|
|
|
|
stream.once('close', () => {
|
|
if (--session[kCurrentStreamCount] === 0) {
|
|
this._emptySessionCount++;
|
|
session.unref();
|
|
|
|
if (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {
|
|
session.close();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (session.destroyed || session.closed) {
|
|
return;
|
|
}
|
|
|
|
if (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
processListeners();
|
|
|
|
if (session[kCurrentStreamCount] === 0) {
|
|
this._processQueue();
|
|
}
|
|
}
|
|
});
|
|
|
|
return stream;
|
|
};
|
|
} catch (error) {
|
|
removeFromQueue();
|
|
this._sessionCount--;
|
|
|
|
for (let index = 0; index < listeners.length; index++) {
|
|
listeners[index].reject(error);
|
|
}
|
|
}
|
|
};
|
|
|
|
entry.listeners = listeners;
|
|
entry.completed = false;
|
|
entry.destroyed = false;
|
|
|
|
this.queue[normalizedOptions][normalizedOrigin] = entry;
|
|
this.queue[normalizedOptions][kLength]++;
|
|
this._processQueue();
|
|
});
|
|
}
|
|
|
|
request(origin, options, headers, streamOptions) {
|
|
return new Promise((resolve, reject) => {
|
|
this.getSession(origin, options, [{
|
|
reject,
|
|
resolve: session => {
|
|
try {
|
|
const stream = session.request(headers, streamOptions);
|
|
|
|
// Do not throw before `request(...)` has been awaited
|
|
delayAsyncDestroy(stream);
|
|
|
|
resolve(stream);
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
}
|
|
}]);
|
|
});
|
|
}
|
|
|
|
async createConnection(origin, options) {
|
|
return Agent.connect(origin, options);
|
|
}
|
|
|
|
static connect(origin, options) {
|
|
options.ALPNProtocols = ['h2'];
|
|
|
|
const port = origin.port || 443;
|
|
const host = origin.hostname;
|
|
|
|
if (typeof options.servername === 'undefined') {
|
|
options.servername = host;
|
|
}
|
|
|
|
const socket = tls.connect(port, host, options);
|
|
|
|
if (options.socket) {
|
|
socket._peername = {
|
|
family: undefined,
|
|
address: undefined,
|
|
port
|
|
};
|
|
}
|
|
|
|
return socket;
|
|
}
|
|
|
|
closeEmptySessions(maxCount = Number.POSITIVE_INFINITY) {
|
|
let closedCount = 0;
|
|
|
|
const {sessions} = this;
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in sessions) {
|
|
const thisSessions = sessions[key];
|
|
|
|
for (let index = 0; index < thisSessions.length; index++) {
|
|
const session = thisSessions[index];
|
|
|
|
if (session[kCurrentStreamCount] === 0) {
|
|
closedCount++;
|
|
session.close();
|
|
|
|
if (closedCount >= maxCount) {
|
|
return closedCount;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return closedCount;
|
|
}
|
|
|
|
destroy(reason) {
|
|
const {sessions, queue} = this;
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in sessions) {
|
|
const thisSessions = sessions[key];
|
|
|
|
for (let index = 0; index < thisSessions.length; index++) {
|
|
thisSessions[index].destroy(reason);
|
|
}
|
|
}
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const normalizedOptions in queue) {
|
|
const entries = queue[normalizedOptions];
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const normalizedOrigin in entries) {
|
|
entries[normalizedOrigin].destroyed = true;
|
|
}
|
|
}
|
|
|
|
// New requests should NOT attach to destroyed sessions
|
|
this.queue = {};
|
|
this.tlsSessionCache.clear();
|
|
}
|
|
|
|
get emptySessionCount() {
|
|
return this._emptySessionCount;
|
|
}
|
|
|
|
get pendingSessionCount() {
|
|
return this._sessionCount - this._emptySessionCount;
|
|
}
|
|
|
|
get sessionCount() {
|
|
return this._sessionCount;
|
|
}
|
|
}
|
|
|
|
Agent.kCurrentStreamCount = kCurrentStreamCount;
|
|
Agent.kGracefullyClosing = kGracefullyClosing;
|
|
|
|
module.exports = {
|
|
Agent,
|
|
globalAgent: new Agent()
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7167:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
// See https://github.com/facebook/jest/issues/2549
|
|
// eslint-disable-next-line node/prefer-global/url
|
|
const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
|
|
const http = __nccwpck_require__(3685);
|
|
const https = __nccwpck_require__(5687);
|
|
const resolveALPN = __nccwpck_require__(6624);
|
|
const QuickLRU = __nccwpck_require__(9273);
|
|
const {Agent, globalAgent} = __nccwpck_require__(9898);
|
|
const Http2ClientRequest = __nccwpck_require__(9632);
|
|
const calculateServerName = __nccwpck_require__(1982);
|
|
const delayAsyncDestroy = __nccwpck_require__(9237);
|
|
|
|
const cache = new QuickLRU({maxSize: 100});
|
|
const queue = new Map();
|
|
|
|
const installSocket = (agent, socket, options) => {
|
|
socket._httpMessage = {shouldKeepAlive: true};
|
|
|
|
const onFree = () => {
|
|
agent.emit('free', socket, options);
|
|
};
|
|
|
|
socket.on('free', onFree);
|
|
|
|
const onClose = () => {
|
|
agent.removeSocket(socket, options);
|
|
};
|
|
|
|
socket.on('close', onClose);
|
|
|
|
const onTimeout = () => {
|
|
const {freeSockets} = agent;
|
|
|
|
for (const sockets of Object.values(freeSockets)) {
|
|
if (sockets.includes(socket)) {
|
|
socket.destroy();
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
|
|
socket.on('timeout', onTimeout);
|
|
|
|
const onRemove = () => {
|
|
agent.removeSocket(socket, options);
|
|
socket.off('close', onClose);
|
|
socket.off('free', onFree);
|
|
socket.off('timeout', onTimeout);
|
|
socket.off('agentRemove', onRemove);
|
|
};
|
|
|
|
socket.on('agentRemove', onRemove);
|
|
|
|
agent.emit('free', socket, options);
|
|
};
|
|
|
|
const createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {
|
|
return async options => {
|
|
const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
|
|
|
|
if (!cache.has(name)) {
|
|
if (queue.has(name)) {
|
|
const result = await queue.get(name);
|
|
return {alpnProtocol: result.alpnProtocol};
|
|
}
|
|
|
|
const {path} = options;
|
|
options.path = options.socketPath;
|
|
|
|
const resultPromise = resolveALPN(options, connect);
|
|
queue.set(name, resultPromise);
|
|
|
|
try {
|
|
const result = await resultPromise;
|
|
|
|
cache.set(name, result.alpnProtocol);
|
|
queue.delete(name);
|
|
|
|
options.path = path;
|
|
|
|
return result;
|
|
} catch (error) {
|
|
queue.delete(name);
|
|
|
|
options.path = path;
|
|
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
return {alpnProtocol: cache.get(name)};
|
|
};
|
|
};
|
|
|
|
const defaultResolveProtocol = createResolveProtocol(cache, queue);
|
|
|
|
module.exports = async (input, options, callback) => {
|
|
if (typeof input === 'string') {
|
|
input = urlToHttpOptions(new URL(input));
|
|
} else if (input instanceof URL) {
|
|
input = urlToHttpOptions(input);
|
|
} else {
|
|
input = {...input};
|
|
}
|
|
|
|
if (typeof options === 'function' || options === undefined) {
|
|
// (options, callback)
|
|
callback = options;
|
|
options = input;
|
|
} else {
|
|
// (input, options, callback)
|
|
options = Object.assign(input, options);
|
|
}
|
|
|
|
options.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];
|
|
|
|
if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {
|
|
throw new Error('The `ALPNProtocols` option must be an Array with at least one entry');
|
|
}
|
|
|
|
options.protocol = options.protocol || 'https:';
|
|
const isHttps = options.protocol === 'https:';
|
|
|
|
options.host = options.hostname || options.host || 'localhost';
|
|
options.session = options.tlsSession;
|
|
options.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);
|
|
options.port = options.port || (isHttps ? 443 : 80);
|
|
options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;
|
|
|
|
const resolveProtocol = options.resolveProtocol || defaultResolveProtocol;
|
|
|
|
// Note: We don't support `h2session` here
|
|
|
|
let {agent} = options;
|
|
if (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') {
|
|
throw new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties');
|
|
}
|
|
|
|
if (isHttps) {
|
|
options.resolveSocket = true;
|
|
|
|
let {socket, alpnProtocol, timeout} = await resolveProtocol(options);
|
|
|
|
if (timeout) {
|
|
if (socket) {
|
|
socket.destroy();
|
|
}
|
|
|
|
const error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);
|
|
error.code = 'ETIMEDOUT';
|
|
error.ms = options.timeout;
|
|
|
|
throw error;
|
|
}
|
|
|
|
// We can't accept custom `createConnection` because the API is different for HTTP/2
|
|
if (socket && options.createConnection) {
|
|
socket.destroy();
|
|
socket = undefined;
|
|
}
|
|
|
|
delete options.resolveSocket;
|
|
|
|
const isHttp2 = alpnProtocol === 'h2';
|
|
|
|
if (agent) {
|
|
agent = isHttp2 ? agent.http2 : agent.https;
|
|
options.agent = agent;
|
|
}
|
|
|
|
if (agent === undefined) {
|
|
agent = isHttp2 ? globalAgent : https.globalAgent;
|
|
}
|
|
|
|
if (socket) {
|
|
if (agent === false) {
|
|
socket.destroy();
|
|
} else {
|
|
const defaultCreateConnection = (isHttp2 ? Agent : https.Agent).prototype.createConnection;
|
|
|
|
if (agent.createConnection === defaultCreateConnection) {
|
|
if (isHttp2) {
|
|
options._reuseSocket = socket;
|
|
} else {
|
|
installSocket(agent, socket, options);
|
|
}
|
|
} else {
|
|
socket.destroy();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isHttp2) {
|
|
return delayAsyncDestroy(new Http2ClientRequest(options, callback));
|
|
}
|
|
} else if (agent) {
|
|
options.agent = agent.http;
|
|
}
|
|
|
|
return delayAsyncDestroy(http.request(options, callback));
|
|
};
|
|
|
|
module.exports.protocolCache = cache;
|
|
module.exports.resolveProtocol = defaultResolveProtocol;
|
|
module.exports.createResolveProtocol = createResolveProtocol;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9632:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
// See https://github.com/facebook/jest/issues/2549
|
|
// eslint-disable-next-line node/prefer-global/url
|
|
const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
|
|
const http2 = __nccwpck_require__(5158);
|
|
const {Writable} = __nccwpck_require__(2781);
|
|
const {Agent, globalAgent} = __nccwpck_require__(9898);
|
|
const IncomingMessage = __nccwpck_require__(2575);
|
|
const proxyEvents = __nccwpck_require__(1818);
|
|
const {
|
|
ERR_INVALID_ARG_TYPE,
|
|
ERR_INVALID_PROTOCOL,
|
|
ERR_HTTP_HEADERS_SENT
|
|
} = __nccwpck_require__(7087);
|
|
const validateHeaderName = __nccwpck_require__(4592);
|
|
const validateHeaderValue = __nccwpck_require__(3549);
|
|
const proxySocketHandler = __nccwpck_require__(9404);
|
|
|
|
const {
|
|
HTTP2_HEADER_STATUS,
|
|
HTTP2_HEADER_METHOD,
|
|
HTTP2_HEADER_PATH,
|
|
HTTP2_HEADER_AUTHORITY,
|
|
HTTP2_METHOD_CONNECT
|
|
} = http2.constants;
|
|
|
|
const kHeaders = Symbol('headers');
|
|
const kOrigin = Symbol('origin');
|
|
const kSession = Symbol('session');
|
|
const kOptions = Symbol('options');
|
|
const kFlushedHeaders = Symbol('flushedHeaders');
|
|
const kJobs = Symbol('jobs');
|
|
const kPendingAgentPromise = Symbol('pendingAgentPromise');
|
|
|
|
class ClientRequest extends Writable {
|
|
constructor(input, options, callback) {
|
|
super({
|
|
autoDestroy: false,
|
|
emitClose: false
|
|
});
|
|
|
|
if (typeof input === 'string') {
|
|
input = urlToHttpOptions(new URL(input));
|
|
} else if (input instanceof URL) {
|
|
input = urlToHttpOptions(input);
|
|
} else {
|
|
input = {...input};
|
|
}
|
|
|
|
if (typeof options === 'function' || options === undefined) {
|
|
// (options, callback)
|
|
callback = options;
|
|
options = input;
|
|
} else {
|
|
// (input, options, callback)
|
|
options = Object.assign(input, options);
|
|
}
|
|
|
|
if (options.h2session) {
|
|
this[kSession] = options.h2session;
|
|
|
|
if (this[kSession].destroyed) {
|
|
throw new Error('The session has been closed already');
|
|
}
|
|
|
|
this.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';
|
|
} else if (options.agent === false) {
|
|
this.agent = new Agent({maxEmptySessions: 0});
|
|
} else if (typeof options.agent === 'undefined' || options.agent === null) {
|
|
this.agent = globalAgent;
|
|
} else if (typeof options.agent.request === 'function') {
|
|
this.agent = options.agent;
|
|
} else {
|
|
throw new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);
|
|
}
|
|
|
|
if (this.agent) {
|
|
this.protocol = this.agent.protocol;
|
|
}
|
|
|
|
if (options.protocol && options.protocol !== this.protocol) {
|
|
throw new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);
|
|
}
|
|
|
|
if (!options.port) {
|
|
options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
|
|
}
|
|
|
|
options.host = options.hostname || options.host || 'localhost';
|
|
|
|
// Unused
|
|
delete options.hostname;
|
|
|
|
const {timeout} = options;
|
|
options.timeout = undefined;
|
|
|
|
this[kHeaders] = Object.create(null);
|
|
this[kJobs] = [];
|
|
|
|
this[kPendingAgentPromise] = undefined;
|
|
|
|
this.socket = null;
|
|
this.connection = null;
|
|
|
|
this.method = options.method || 'GET';
|
|
|
|
if (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {
|
|
this.path = options.path;
|
|
}
|
|
|
|
this.res = null;
|
|
this.aborted = false;
|
|
this.reusedSocket = false;
|
|
|
|
const {headers} = options;
|
|
if (headers) {
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const header in headers) {
|
|
this.setHeader(header, headers[header]);
|
|
}
|
|
}
|
|
|
|
if (options.auth && !('authorization' in this[kHeaders])) {
|
|
this[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64');
|
|
}
|
|
|
|
options.session = options.tlsSession;
|
|
options.path = options.socketPath;
|
|
|
|
this[kOptions] = options;
|
|
|
|
// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.
|
|
this[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`);
|
|
|
|
// A socket is being reused
|
|
const reuseSocket = options._reuseSocket;
|
|
if (reuseSocket) {
|
|
options.createConnection = (...args) => {
|
|
if (reuseSocket.destroyed) {
|
|
return this.agent.createConnection(...args);
|
|
}
|
|
|
|
return reuseSocket;
|
|
};
|
|
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
this.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});
|
|
}
|
|
|
|
if (timeout) {
|
|
this.setTimeout(timeout);
|
|
}
|
|
|
|
if (callback) {
|
|
this.once('response', callback);
|
|
}
|
|
|
|
this[kFlushedHeaders] = false;
|
|
}
|
|
|
|
get method() {
|
|
return this[kHeaders][HTTP2_HEADER_METHOD];
|
|
}
|
|
|
|
set method(value) {
|
|
if (value) {
|
|
this[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase();
|
|
}
|
|
}
|
|
|
|
get path() {
|
|
const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
|
|
|
|
return this[kHeaders][header];
|
|
}
|
|
|
|
set path(value) {
|
|
if (value) {
|
|
const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
|
|
|
|
this[kHeaders][header] = value;
|
|
}
|
|
}
|
|
|
|
get host() {
|
|
return this[kOrigin].hostname;
|
|
}
|
|
|
|
set host(_value) {
|
|
// Do nothing as this is read only.
|
|
}
|
|
|
|
get _mustNotHaveABody() {
|
|
return this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';
|
|
}
|
|
|
|
_write(chunk, encoding, callback) {
|
|
// https://github.com/nodejs/node/blob/654df09ae0c5e17d1b52a900a545f0664d8c7627/lib/internal/http2/util.js#L148-L156
|
|
if (this._mustNotHaveABody) {
|
|
callback(new Error('The GET, HEAD and DELETE methods must NOT have a body'));
|
|
/* istanbul ignore next: Node.js 12 throws directly */
|
|
return;
|
|
}
|
|
|
|
this.flushHeaders();
|
|
|
|
const callWrite = () => this._request.write(chunk, encoding, callback);
|
|
if (this._request) {
|
|
callWrite();
|
|
} else {
|
|
this[kJobs].push(callWrite);
|
|
}
|
|
}
|
|
|
|
_final(callback) {
|
|
this.flushHeaders();
|
|
|
|
const callEnd = () => {
|
|
// For GET, HEAD and DELETE and CONNECT
|
|
if (this._mustNotHaveABody || this.method === 'CONNECT') {
|
|
callback();
|
|
return;
|
|
}
|
|
|
|
this._request.end(callback);
|
|
};
|
|
|
|
if (this._request) {
|
|
callEnd();
|
|
} else {
|
|
this[kJobs].push(callEnd);
|
|
}
|
|
}
|
|
|
|
abort() {
|
|
if (this.res && this.res.complete) {
|
|
return;
|
|
}
|
|
|
|
if (!this.aborted) {
|
|
process.nextTick(() => this.emit('abort'));
|
|
}
|
|
|
|
this.aborted = true;
|
|
|
|
this.destroy();
|
|
}
|
|
|
|
async _destroy(error, callback) {
|
|
if (this.res) {
|
|
this.res._dump();
|
|
}
|
|
|
|
if (this._request) {
|
|
this._request.destroy();
|
|
} else {
|
|
process.nextTick(() => {
|
|
this.emit('close');
|
|
});
|
|
}
|
|
|
|
try {
|
|
await this[kPendingAgentPromise];
|
|
} catch (internalError) {
|
|
if (this.aborted) {
|
|
error = internalError;
|
|
}
|
|
}
|
|
|
|
callback(error);
|
|
}
|
|
|
|
async flushHeaders() {
|
|
if (this[kFlushedHeaders] || this.destroyed) {
|
|
return;
|
|
}
|
|
|
|
this[kFlushedHeaders] = true;
|
|
|
|
const isConnectMethod = this.method === HTTP2_METHOD_CONNECT;
|
|
|
|
// The real magic is here
|
|
const onStream = stream => {
|
|
this._request = stream;
|
|
|
|
if (this.destroyed) {
|
|
stream.destroy();
|
|
return;
|
|
}
|
|
|
|
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
|
|
if (!isConnectMethod) {
|
|
// TODO: Should we proxy `close` here?
|
|
proxyEvents(stream, this, ['timeout', 'continue']);
|
|
}
|
|
|
|
stream.once('error', error => {
|
|
this.destroy(error);
|
|
});
|
|
|
|
stream.once('aborted', () => {
|
|
const {res} = this;
|
|
if (res) {
|
|
res.aborted = true;
|
|
res.emit('aborted');
|
|
res.destroy();
|
|
} else {
|
|
this.destroy(new Error('The server aborted the HTTP/2 stream'));
|
|
}
|
|
});
|
|
|
|
const onResponse = (headers, flags, rawHeaders) => {
|
|
// If we were to emit raw request stream, it would be as fast as the native approach.
|
|
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
|
|
const response = new IncomingMessage(this.socket, stream.readableHighWaterMark);
|
|
this.res = response;
|
|
|
|
// Undocumented, but it is used by `cacheable-request`
|
|
response.url = `${this[kOrigin].origin}${this.path}`;
|
|
|
|
response.req = this;
|
|
response.statusCode = headers[HTTP2_HEADER_STATUS];
|
|
response.headers = headers;
|
|
response.rawHeaders = rawHeaders;
|
|
|
|
response.once('end', () => {
|
|
response.complete = true;
|
|
|
|
// Has no effect, just be consistent with the Node.js behavior
|
|
response.socket = null;
|
|
response.connection = null;
|
|
});
|
|
|
|
if (isConnectMethod) {
|
|
response.upgrade = true;
|
|
|
|
// The HTTP1 API says the socket is detached here,
|
|
// but we can't do that so we pass the original HTTP2 request.
|
|
if (this.emit('connect', response, stream, Buffer.alloc(0))) {
|
|
this.emit('close');
|
|
} else {
|
|
// No listeners attached, destroy the original request.
|
|
stream.destroy();
|
|
}
|
|
} else {
|
|
// Forwards data
|
|
stream.on('data', chunk => {
|
|
if (!response._dumped && !response.push(chunk)) {
|
|
stream.pause();
|
|
}
|
|
});
|
|
|
|
stream.once('end', () => {
|
|
if (!this.aborted) {
|
|
response.push(null);
|
|
}
|
|
});
|
|
|
|
if (!this.emit('response', response)) {
|
|
// No listeners attached, dump the response.
|
|
response._dump();
|
|
}
|
|
}
|
|
};
|
|
|
|
// This event tells we are ready to listen for the data.
|
|
stream.once('response', onResponse);
|
|
|
|
// Emits `information` event
|
|
stream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));
|
|
|
|
stream.once('trailers', (trailers, flags, rawTrailers) => {
|
|
const {res} = this;
|
|
|
|
// https://github.com/nodejs/node/issues/41251
|
|
if (res === null) {
|
|
onResponse(trailers, flags, rawTrailers);
|
|
return;
|
|
}
|
|
|
|
// Assigns trailers to the response object.
|
|
res.trailers = trailers;
|
|
res.rawTrailers = rawTrailers;
|
|
});
|
|
|
|
stream.once('close', () => {
|
|
const {aborted, res} = this;
|
|
if (res) {
|
|
if (aborted) {
|
|
res.aborted = true;
|
|
res.emit('aborted');
|
|
res.destroy();
|
|
}
|
|
|
|
const finish = () => {
|
|
res.emit('close');
|
|
|
|
this.destroy();
|
|
this.emit('close');
|
|
};
|
|
|
|
if (res.readable) {
|
|
res.once('end', finish);
|
|
} else {
|
|
finish();
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (!this.destroyed) {
|
|
this.destroy(new Error('The HTTP/2 stream has been early terminated'));
|
|
this.emit('close');
|
|
return;
|
|
}
|
|
|
|
this.destroy();
|
|
this.emit('close');
|
|
});
|
|
|
|
this.socket = new Proxy(stream, proxySocketHandler);
|
|
|
|
for (const job of this[kJobs]) {
|
|
job();
|
|
}
|
|
|
|
this.emit('socket', this.socket);
|
|
};
|
|
|
|
if (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) {
|
|
this[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host;
|
|
}
|
|
|
|
// Makes a HTTP2 request
|
|
if (this[kSession]) {
|
|
try {
|
|
onStream(this[kSession].request(this[kHeaders]));
|
|
} catch (error) {
|
|
this.destroy(error);
|
|
}
|
|
} else {
|
|
this.reusedSocket = true;
|
|
|
|
try {
|
|
const promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);
|
|
this[kPendingAgentPromise] = promise;
|
|
|
|
onStream(await promise);
|
|
|
|
this[kPendingAgentPromise] = false;
|
|
} catch (error) {
|
|
this[kPendingAgentPromise] = false;
|
|
|
|
this.destroy(error);
|
|
}
|
|
}
|
|
}
|
|
|
|
get connection() {
|
|
return this.socket;
|
|
}
|
|
|
|
set connection(value) {
|
|
this.socket = value;
|
|
}
|
|
|
|
getHeaderNames() {
|
|
return Object.keys(this[kHeaders]);
|
|
}
|
|
|
|
hasHeader(name) {
|
|
if (typeof name !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
|
|
}
|
|
|
|
return Boolean(this[kHeaders][name.toLowerCase()]);
|
|
}
|
|
|
|
getHeader(name) {
|
|
if (typeof name !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
|
|
}
|
|
|
|
return this[kHeaders][name.toLowerCase()];
|
|
}
|
|
|
|
get headersSent() {
|
|
return this[kFlushedHeaders];
|
|
}
|
|
|
|
removeHeader(name) {
|
|
if (typeof name !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
|
|
}
|
|
|
|
if (this.headersSent) {
|
|
throw new ERR_HTTP_HEADERS_SENT('remove');
|
|
}
|
|
|
|
delete this[kHeaders][name.toLowerCase()];
|
|
}
|
|
|
|
setHeader(name, value) {
|
|
if (this.headersSent) {
|
|
throw new ERR_HTTP_HEADERS_SENT('set');
|
|
}
|
|
|
|
validateHeaderName(name);
|
|
validateHeaderValue(name, value);
|
|
|
|
const lowercased = name.toLowerCase();
|
|
|
|
if (lowercased === 'connection') {
|
|
if (value.toLowerCase() === 'keep-alive') {
|
|
return;
|
|
}
|
|
|
|
throw new Error(`Invalid 'connection' header: ${value}`);
|
|
}
|
|
|
|
if (lowercased === 'host' && this.method === 'CONNECT') {
|
|
this[kHeaders][HTTP2_HEADER_AUTHORITY] = value;
|
|
} else {
|
|
this[kHeaders][lowercased] = value;
|
|
}
|
|
}
|
|
|
|
setNoDelay() {
|
|
// HTTP2 sockets cannot be malformed, do nothing.
|
|
}
|
|
|
|
setSocketKeepAlive() {
|
|
// HTTP2 sockets cannot be malformed, do nothing.
|
|
}
|
|
|
|
setTimeout(ms, callback) {
|
|
const applyTimeout = () => this._request.setTimeout(ms, callback);
|
|
|
|
if (this._request) {
|
|
applyTimeout();
|
|
} else {
|
|
this[kJobs].push(applyTimeout);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
get maxHeadersCount() {
|
|
if (!this.destroyed && this._request) {
|
|
return this._request.session.localSettings.maxHeaderListSize;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
set maxHeadersCount(_value) {
|
|
// Updating HTTP2 settings would affect all requests, do nothing.
|
|
}
|
|
}
|
|
|
|
module.exports = ClientRequest;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2575:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {Readable} = __nccwpck_require__(2781);
|
|
|
|
class IncomingMessage extends Readable {
|
|
constructor(socket, highWaterMark) {
|
|
super({
|
|
emitClose: false,
|
|
autoDestroy: true,
|
|
highWaterMark
|
|
});
|
|
|
|
this.statusCode = null;
|
|
this.statusMessage = '';
|
|
this.httpVersion = '2.0';
|
|
this.httpVersionMajor = 2;
|
|
this.httpVersionMinor = 0;
|
|
this.headers = {};
|
|
this.trailers = {};
|
|
this.req = null;
|
|
|
|
this.aborted = false;
|
|
this.complete = false;
|
|
this.upgrade = null;
|
|
|
|
this.rawHeaders = [];
|
|
this.rawTrailers = [];
|
|
|
|
this.socket = socket;
|
|
|
|
this._dumped = false;
|
|
}
|
|
|
|
get connection() {
|
|
return this.socket;
|
|
}
|
|
|
|
set connection(value) {
|
|
this.socket = value;
|
|
}
|
|
|
|
_destroy(error, callback) {
|
|
if (!this.readableEnded) {
|
|
this.aborted = true;
|
|
}
|
|
|
|
// See https://github.com/nodejs/node/issues/35303
|
|
callback();
|
|
|
|
this.req._request.destroy(error);
|
|
}
|
|
|
|
setTimeout(ms, callback) {
|
|
this.req.setTimeout(ms, callback);
|
|
return this;
|
|
}
|
|
|
|
_dump() {
|
|
if (!this._dumped) {
|
|
this._dumped = true;
|
|
|
|
this.removeAllListeners('data');
|
|
this.resume();
|
|
}
|
|
}
|
|
|
|
_read() {
|
|
if (this.req) {
|
|
this.req._request.resume();
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = IncomingMessage;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4645:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const http2 = __nccwpck_require__(5158);
|
|
const {
|
|
Agent,
|
|
globalAgent
|
|
} = __nccwpck_require__(9898);
|
|
const ClientRequest = __nccwpck_require__(9632);
|
|
const IncomingMessage = __nccwpck_require__(2575);
|
|
const auto = __nccwpck_require__(7167);
|
|
const {
|
|
HttpOverHttp2,
|
|
HttpsOverHttp2
|
|
} = __nccwpck_require__(8795);
|
|
const Http2OverHttp2 = __nccwpck_require__(8553);
|
|
const {
|
|
Http2OverHttp,
|
|
Http2OverHttps
|
|
} = __nccwpck_require__(9794);
|
|
const validateHeaderName = __nccwpck_require__(4592);
|
|
const validateHeaderValue = __nccwpck_require__(3549);
|
|
|
|
const request = (url, options, callback) => new ClientRequest(url, options, callback);
|
|
|
|
const get = (url, options, callback) => {
|
|
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
const req = new ClientRequest(url, options, callback);
|
|
req.end();
|
|
|
|
return req;
|
|
};
|
|
|
|
module.exports = {
|
|
...http2,
|
|
ClientRequest,
|
|
IncomingMessage,
|
|
Agent,
|
|
globalAgent,
|
|
request,
|
|
get,
|
|
auto,
|
|
proxies: {
|
|
HttpOverHttp2,
|
|
HttpsOverHttp2,
|
|
Http2OverHttp2,
|
|
Http2OverHttp,
|
|
Http2OverHttps
|
|
},
|
|
validateHeaderName,
|
|
validateHeaderValue
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7885:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = self => {
|
|
const {username, password} = self.proxyOptions.url;
|
|
|
|
if (username || password) {
|
|
const data = `${username}:${password}`;
|
|
const authorization = `Basic ${Buffer.from(data).toString('base64')}`;
|
|
|
|
return {
|
|
'proxy-authorization': authorization,
|
|
authorization
|
|
};
|
|
}
|
|
|
|
return {};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8795:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const tls = __nccwpck_require__(4404);
|
|
const http = __nccwpck_require__(3685);
|
|
const https = __nccwpck_require__(5687);
|
|
const JSStreamSocket = __nccwpck_require__(1564);
|
|
const {globalAgent} = __nccwpck_require__(9898);
|
|
const UnexpectedStatusCodeError = __nccwpck_require__(6203);
|
|
const initialize = __nccwpck_require__(1089);
|
|
const getAuthorizationHeaders = __nccwpck_require__(7885);
|
|
|
|
const createConnection = (self, options, callback) => {
|
|
(async () => {
|
|
try {
|
|
const {proxyOptions} = self;
|
|
const {url, headers, raw} = proxyOptions;
|
|
|
|
const stream = await globalAgent.request(url, proxyOptions, {
|
|
...getAuthorizationHeaders(self),
|
|
...headers,
|
|
':method': 'CONNECT',
|
|
':authority': `${options.host}:${options.port}`
|
|
});
|
|
|
|
stream.once('error', callback);
|
|
stream.once('response', headers => {
|
|
const statusCode = headers[':status'];
|
|
|
|
if (statusCode !== 200) {
|
|
callback(new UnexpectedStatusCodeError(statusCode));
|
|
return;
|
|
}
|
|
|
|
const encrypted = self instanceof https.Agent;
|
|
|
|
if (raw && encrypted) {
|
|
options.socket = stream;
|
|
const secureStream = tls.connect(options);
|
|
|
|
secureStream.once('close', () => {
|
|
stream.destroy();
|
|
});
|
|
|
|
callback(null, secureStream);
|
|
return;
|
|
}
|
|
|
|
const socket = new JSStreamSocket(stream);
|
|
socket.encrypted = false;
|
|
socket._handle.getpeername = out => {
|
|
out.family = undefined;
|
|
out.address = undefined;
|
|
out.port = undefined;
|
|
};
|
|
|
|
callback(null, socket);
|
|
});
|
|
} catch (error) {
|
|
callback(error);
|
|
}
|
|
})();
|
|
};
|
|
|
|
class HttpOverHttp2 extends http.Agent {
|
|
constructor(options) {
|
|
super(options);
|
|
|
|
initialize(this, options.proxyOptions);
|
|
}
|
|
|
|
createConnection(options, callback) {
|
|
createConnection(this, options, callback);
|
|
}
|
|
}
|
|
|
|
class HttpsOverHttp2 extends https.Agent {
|
|
constructor(options) {
|
|
super(options);
|
|
|
|
initialize(this, options.proxyOptions);
|
|
}
|
|
|
|
createConnection(options, callback) {
|
|
createConnection(this, options, callback);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
HttpOverHttp2,
|
|
HttpsOverHttp2
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9794:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const http = __nccwpck_require__(3685);
|
|
const https = __nccwpck_require__(5687);
|
|
const Http2OverHttpX = __nccwpck_require__(1857);
|
|
const getAuthorizationHeaders = __nccwpck_require__(7885);
|
|
|
|
const getStream = request => new Promise((resolve, reject) => {
|
|
const onConnect = (response, socket, head) => {
|
|
socket.unshift(head);
|
|
|
|
request.off('error', reject);
|
|
resolve([socket, response.statusCode]);
|
|
};
|
|
|
|
request.once('error', reject);
|
|
request.once('connect', onConnect);
|
|
});
|
|
|
|
class Http2OverHttp extends Http2OverHttpX {
|
|
async _getProxyStream(authority) {
|
|
const {proxyOptions} = this;
|
|
const {url, headers} = this.proxyOptions;
|
|
|
|
const network = url.protocol === 'https:' ? https : http;
|
|
|
|
// `new URL('https://localhost/httpbin.org:443')` results in
|
|
// a `/httpbin.org:443` path, which has an invalid leading slash.
|
|
const request = network.request({
|
|
...proxyOptions,
|
|
hostname: url.hostname,
|
|
port: url.port,
|
|
path: authority,
|
|
headers: {
|
|
...getAuthorizationHeaders(this),
|
|
...headers,
|
|
host: authority
|
|
},
|
|
method: 'CONNECT'
|
|
}).end();
|
|
|
|
return getStream(request);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
Http2OverHttp,
|
|
Http2OverHttps: Http2OverHttp
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8553:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {globalAgent} = __nccwpck_require__(9898);
|
|
const Http2OverHttpX = __nccwpck_require__(1857);
|
|
const getAuthorizationHeaders = __nccwpck_require__(7885);
|
|
|
|
const getStatusCode = stream => new Promise((resolve, reject) => {
|
|
stream.once('error', reject);
|
|
stream.once('response', headers => {
|
|
stream.off('error', reject);
|
|
resolve(headers[':status']);
|
|
});
|
|
});
|
|
|
|
class Http2OverHttp2 extends Http2OverHttpX {
|
|
async _getProxyStream(authority) {
|
|
const {proxyOptions} = this;
|
|
|
|
const headers = {
|
|
...getAuthorizationHeaders(this),
|
|
...proxyOptions.headers,
|
|
':method': 'CONNECT',
|
|
':authority': authority
|
|
};
|
|
|
|
const stream = await globalAgent.request(proxyOptions.url, proxyOptions, headers);
|
|
const statusCode = await getStatusCode(stream);
|
|
|
|
return [stream, statusCode];
|
|
}
|
|
}
|
|
|
|
module.exports = Http2OverHttp2;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1857:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {Agent} = __nccwpck_require__(9898);
|
|
const JSStreamSocket = __nccwpck_require__(1564);
|
|
const UnexpectedStatusCodeError = __nccwpck_require__(6203);
|
|
const initialize = __nccwpck_require__(1089);
|
|
|
|
class Http2OverHttpX extends Agent {
|
|
constructor(options) {
|
|
super(options);
|
|
|
|
initialize(this, options.proxyOptions);
|
|
}
|
|
|
|
async createConnection(origin, options) {
|
|
const authority = `${origin.hostname}:${origin.port || 443}`;
|
|
|
|
const [stream, statusCode] = await this._getProxyStream(authority);
|
|
if (statusCode !== 200) {
|
|
throw new UnexpectedStatusCodeError(statusCode);
|
|
}
|
|
|
|
if (this.proxyOptions.raw) {
|
|
options.socket = stream;
|
|
} else {
|
|
const socket = new JSStreamSocket(stream);
|
|
socket.encrypted = false;
|
|
socket._handle.getpeername = out => {
|
|
out.family = undefined;
|
|
out.address = undefined;
|
|
out.port = undefined;
|
|
};
|
|
|
|
return socket;
|
|
}
|
|
|
|
return super.createConnection(origin, options);
|
|
}
|
|
}
|
|
|
|
module.exports = Http2OverHttpX;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1089:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
// See https://github.com/facebook/jest/issues/2549
|
|
// eslint-disable-next-line node/prefer-global/url
|
|
const {URL} = __nccwpck_require__(7310);
|
|
const checkType = __nccwpck_require__(3453);
|
|
|
|
module.exports = (self, proxyOptions) => {
|
|
checkType('proxyOptions', proxyOptions, ['object']);
|
|
checkType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']);
|
|
checkType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']);
|
|
checkType('proxyOptions.url', proxyOptions.url, [URL, 'string']);
|
|
|
|
const url = new URL(proxyOptions.url);
|
|
|
|
self.proxyOptions = {
|
|
raw: true,
|
|
...proxyOptions,
|
|
headers: {...proxyOptions.headers},
|
|
url
|
|
};
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6203:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
class UnexpectedStatusCodeError extends Error {
|
|
constructor(statusCode) {
|
|
super(`The proxy server rejected the request with status code ${statusCode}`);
|
|
this.statusCode = statusCode;
|
|
}
|
|
}
|
|
|
|
module.exports = UnexpectedStatusCodeError;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1982:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {isIP} = __nccwpck_require__(1808);
|
|
const assert = __nccwpck_require__(9491);
|
|
|
|
const getHost = host => {
|
|
if (host[0] === '[') {
|
|
const idx = host.indexOf(']');
|
|
|
|
assert(idx !== -1);
|
|
return host.slice(1, idx);
|
|
}
|
|
|
|
const idx = host.indexOf(':');
|
|
if (idx === -1) {
|
|
return host;
|
|
}
|
|
|
|
return host.slice(0, idx);
|
|
};
|
|
|
|
module.exports = host => {
|
|
const servername = getHost(host);
|
|
|
|
if (isIP(servername)) {
|
|
return '';
|
|
}
|
|
|
|
return servername;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3453:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const checkType = (name, value, types) => {
|
|
const valid = types.some(type => {
|
|
const typeofType = typeof type;
|
|
if (typeofType === 'string') {
|
|
return typeof value === type;
|
|
}
|
|
|
|
return value instanceof type;
|
|
});
|
|
|
|
if (!valid) {
|
|
const names = types.map(type => typeof type === 'string' ? type : type.name);
|
|
|
|
throw new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`);
|
|
}
|
|
};
|
|
|
|
module.exports = checkType;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9237:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = stream => {
|
|
if (stream.listenerCount('error') !== 0) {
|
|
return stream;
|
|
}
|
|
|
|
stream.__destroy = stream._destroy;
|
|
stream._destroy = (...args) => {
|
|
const callback = args.pop();
|
|
|
|
stream.__destroy(...args, async error => {
|
|
await Promise.resolve();
|
|
callback(error);
|
|
});
|
|
};
|
|
|
|
const onError = error => {
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
Promise.resolve().then(() => {
|
|
stream.emit('error', error);
|
|
});
|
|
};
|
|
|
|
stream.once('error', onError);
|
|
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
Promise.resolve().then(() => {
|
|
stream.off('error', onError);
|
|
});
|
|
|
|
return stream;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7087:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */
|
|
|
|
const makeError = (Base, key, getMessage) => {
|
|
module.exports[key] = class NodeError extends Base {
|
|
constructor(...args) {
|
|
super(typeof getMessage === 'string' ? getMessage : getMessage(args));
|
|
this.name = `${super.name} [${key}]`;
|
|
this.code = key;
|
|
}
|
|
};
|
|
};
|
|
|
|
makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {
|
|
const type = args[0].includes('.') ? 'property' : 'argument';
|
|
|
|
let valid = args[1];
|
|
const isManyTypes = Array.isArray(valid);
|
|
|
|
if (isManyTypes) {
|
|
valid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`;
|
|
}
|
|
|
|
return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;
|
|
});
|
|
|
|
makeError(TypeError, 'ERR_INVALID_PROTOCOL', args =>
|
|
`Protocol "${args[0]}" not supported. Expected "${args[1]}"`
|
|
);
|
|
|
|
makeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>
|
|
`Cannot ${args[0]} headers after they are sent to the client`
|
|
);
|
|
|
|
makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>
|
|
`${args[0]} must be a valid HTTP token [${args[1]}]`
|
|
);
|
|
|
|
makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>
|
|
`Invalid value "${args[0]} for header "${args[1]}"`
|
|
);
|
|
|
|
makeError(TypeError, 'ERR_INVALID_CHAR', args =>
|
|
`Invalid character in ${args[0]} [${args[1]}]`
|
|
);
|
|
|
|
makeError(
|
|
Error,
|
|
'ERR_HTTP2_NO_SOCKET_MANIPULATION',
|
|
'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'
|
|
);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1199:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = header => {
|
|
switch (header) {
|
|
case ':method':
|
|
case ':scheme':
|
|
case ':authority':
|
|
case ':path':
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1564:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const stream = __nccwpck_require__(2781);
|
|
const tls = __nccwpck_require__(4404);
|
|
|
|
// Really awesome hack.
|
|
const JSStreamSocket = (new tls.TLSSocket(new stream.PassThrough()))._handle._parentWrap.constructor;
|
|
|
|
module.exports = JSStreamSocket;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1818:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = (from, to, events) => {
|
|
for (const event of events) {
|
|
from.on(event, (...args) => to.emit(event, ...args));
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9404:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = __nccwpck_require__(7087);
|
|
|
|
/* istanbul ignore file */
|
|
/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */
|
|
|
|
const proxySocketHandler = {
|
|
has(stream, property) {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
return (property in stream) || (property in reference);
|
|
},
|
|
|
|
get(stream, property) {
|
|
switch (property) {
|
|
case 'on':
|
|
case 'once':
|
|
case 'end':
|
|
case 'emit':
|
|
case 'destroy':
|
|
return stream[property].bind(stream);
|
|
case 'writable':
|
|
case 'destroyed':
|
|
return stream[property];
|
|
case 'readable':
|
|
if (stream.destroyed) {
|
|
return false;
|
|
}
|
|
|
|
return stream.readable;
|
|
case 'setTimeout': {
|
|
const {session} = stream;
|
|
if (session !== undefined) {
|
|
return session.setTimeout.bind(session);
|
|
}
|
|
|
|
return stream.setTimeout.bind(stream);
|
|
}
|
|
|
|
case 'write':
|
|
case 'read':
|
|
case 'pause':
|
|
case 'resume':
|
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
|
default: {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
const value = reference[property];
|
|
|
|
return typeof value === 'function' ? value.bind(reference) : value;
|
|
}
|
|
}
|
|
},
|
|
|
|
getPrototypeOf(stream) {
|
|
if (stream.session !== undefined) {
|
|
// Replaced [kSocket] with .socket
|
|
return Reflect.getPrototypeOf(stream.session.socket);
|
|
}
|
|
|
|
return Reflect.getPrototypeOf(stream);
|
|
},
|
|
|
|
set(stream, property, value) {
|
|
switch (property) {
|
|
case 'writable':
|
|
case 'readable':
|
|
case 'destroyed':
|
|
case 'on':
|
|
case 'once':
|
|
case 'end':
|
|
case 'emit':
|
|
case 'destroy':
|
|
stream[property] = value;
|
|
return true;
|
|
case 'setTimeout': {
|
|
const {session} = stream;
|
|
if (session === undefined) {
|
|
stream.setTimeout = value;
|
|
} else {
|
|
session.setTimeout = value;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
case 'write':
|
|
case 'read':
|
|
case 'pause':
|
|
case 'resume':
|
|
throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
|
|
default: {
|
|
// Replaced [kSocket] with .socket
|
|
const reference = stream.session === undefined ? stream : stream.session.socket;
|
|
reference[property] = value;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = proxySocketHandler;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4592:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {ERR_INVALID_HTTP_TOKEN} = __nccwpck_require__(7087);
|
|
const isRequestPseudoHeader = __nccwpck_require__(1199);
|
|
|
|
const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
|
|
|
|
module.exports = name => {
|
|
if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
|
|
throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3549:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
ERR_HTTP_INVALID_HEADER_VALUE,
|
|
ERR_INVALID_CHAR
|
|
} = __nccwpck_require__(7087);
|
|
|
|
const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
|
|
|
|
module.exports = (name, value) => {
|
|
if (typeof value === 'undefined') {
|
|
throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
|
|
}
|
|
|
|
if (isInvalidHeaderValue.test(value)) {
|
|
throw new ERR_INVALID_CHAR('header content', name);
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6435:
|
|
/***/ ((module) => {
|
|
|
|
/*!
|
|
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
*
|
|
* Copyright (c) 2014-2016, Jon Schlinkert.
|
|
* Licensed under the MIT License.
|
|
*/
|
|
|
|
module.exports = function isExtglob(str) {
|
|
if (typeof str !== 'string' || str === '') {
|
|
return false;
|
|
}
|
|
|
|
var match;
|
|
while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
|
|
if (match[2]) return true;
|
|
str = str.slice(match.index + match[0].length);
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4466:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
/*!
|
|
* is-glob <https://github.com/jonschlinkert/is-glob>
|
|
*
|
|
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
* Released under the MIT License.
|
|
*/
|
|
|
|
var isExtglob = __nccwpck_require__(6435);
|
|
var chars = { '{': '}', '(': ')', '[': ']'};
|
|
var strictCheck = function(str) {
|
|
if (str[0] === '!') {
|
|
return true;
|
|
}
|
|
var index = 0;
|
|
var pipeIndex = -2;
|
|
var closeSquareIndex = -2;
|
|
var closeCurlyIndex = -2;
|
|
var closeParenIndex = -2;
|
|
var backSlashIndex = -2;
|
|
while (index < str.length) {
|
|
if (str[index] === '*') {
|
|
return true;
|
|
}
|
|
|
|
if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) {
|
|
return true;
|
|
}
|
|
|
|
if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {
|
|
if (closeSquareIndex < index) {
|
|
closeSquareIndex = str.indexOf(']', index);
|
|
}
|
|
if (closeSquareIndex > index) {
|
|
if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
|
|
return true;
|
|
}
|
|
backSlashIndex = str.indexOf('\\', index);
|
|
if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {
|
|
closeCurlyIndex = str.indexOf('}', index);
|
|
if (closeCurlyIndex > index) {
|
|
backSlashIndex = str.indexOf('\\', index);
|
|
if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {
|
|
closeParenIndex = str.indexOf(')', index);
|
|
if (closeParenIndex > index) {
|
|
backSlashIndex = str.indexOf('\\', index);
|
|
if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {
|
|
if (pipeIndex < index) {
|
|
pipeIndex = str.indexOf('|', index);
|
|
}
|
|
if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {
|
|
closeParenIndex = str.indexOf(')', pipeIndex);
|
|
if (closeParenIndex > pipeIndex) {
|
|
backSlashIndex = str.indexOf('\\', pipeIndex);
|
|
if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (str[index] === '\\') {
|
|
var open = str[index + 1];
|
|
index += 2;
|
|
var close = chars[open];
|
|
|
|
if (close) {
|
|
var n = str.indexOf(close, index);
|
|
if (n !== -1) {
|
|
index = n + 1;
|
|
}
|
|
}
|
|
|
|
if (str[index] === '!') {
|
|
return true;
|
|
}
|
|
} else {
|
|
index++;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var relaxedCheck = function(str) {
|
|
if (str[0] === '!') {
|
|
return true;
|
|
}
|
|
var index = 0;
|
|
while (index < str.length) {
|
|
if (/[*?{}()[\]]/.test(str[index])) {
|
|
return true;
|
|
}
|
|
|
|
if (str[index] === '\\') {
|
|
var open = str[index + 1];
|
|
index += 2;
|
|
var close = chars[open];
|
|
|
|
if (close) {
|
|
var n = str.indexOf(close, index);
|
|
if (n !== -1) {
|
|
index = n + 1;
|
|
}
|
|
}
|
|
|
|
if (str[index] === '!') {
|
|
return true;
|
|
}
|
|
} else {
|
|
index++;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
module.exports = function isGlob(str, options) {
|
|
if (typeof str !== 'string' || str === '') {
|
|
return false;
|
|
}
|
|
|
|
if (isExtglob(str)) {
|
|
return true;
|
|
}
|
|
|
|
var check = strictCheck;
|
|
|
|
// optionally relax check
|
|
if (options && options.strict === false) {
|
|
check = relaxedCheck;
|
|
}
|
|
|
|
return check(str);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5680:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
/*!
|
|
* is-number <https://github.com/jonschlinkert/is-number>
|
|
*
|
|
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
* Released under the MIT License.
|
|
*/
|
|
|
|
|
|
|
|
module.exports = function(num) {
|
|
if (typeof num === 'number') {
|
|
return num - num === 0;
|
|
}
|
|
if (typeof num === 'string' && num.trim() !== '') {
|
|
return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
|
|
}
|
|
return false;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3287:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
/*!
|
|
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
|
|
*
|
|
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
* Released under the MIT License.
|
|
*/
|
|
|
|
function isObject(o) {
|
|
return Object.prototype.toString.call(o) === '[object Object]';
|
|
}
|
|
|
|
function isPlainObject(o) {
|
|
var ctor,prot;
|
|
|
|
if (isObject(o) === false) return false;
|
|
|
|
// If has modified constructor
|
|
ctor = o.constructor;
|
|
if (ctor === undefined) return true;
|
|
|
|
// If has modified prototype
|
|
prot = ctor.prototype;
|
|
if (isObject(prot) === false) return false;
|
|
|
|
// If constructor does not have an Object-specific method
|
|
if (prot.hasOwnProperty('isPrototypeOf') === false) {
|
|
return false;
|
|
}
|
|
|
|
// Most likely a plain Object
|
|
return true;
|
|
}
|
|
|
|
exports.isPlainObject = isPlainObject;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2820:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
//TODO: handle reviver/dehydrate function like normal
|
|
//and handle indentation, like normal.
|
|
//if anyone needs this... please send pull request.
|
|
|
|
exports.stringify = function stringify (o) {
|
|
if('undefined' == typeof o) return o
|
|
|
|
if(o && Buffer.isBuffer(o))
|
|
return JSON.stringify(':base64:' + o.toString('base64'))
|
|
|
|
if(o && o.toJSON)
|
|
o = o.toJSON()
|
|
|
|
if(o && 'object' === typeof o) {
|
|
var s = ''
|
|
var array = Array.isArray(o)
|
|
s = array ? '[' : '{'
|
|
var first = true
|
|
|
|
for(var k in o) {
|
|
var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])
|
|
if(Object.hasOwnProperty.call(o, k) && !ignore) {
|
|
if(!first)
|
|
s += ','
|
|
first = false
|
|
if (array) {
|
|
if(o[k] == undefined)
|
|
s += 'null'
|
|
else
|
|
s += stringify(o[k])
|
|
} else if (o[k] !== void(0)) {
|
|
s += stringify(k) + ':' + stringify(o[k])
|
|
}
|
|
}
|
|
}
|
|
|
|
s += array ? ']' : '}'
|
|
|
|
return s
|
|
} else if ('string' === typeof o) {
|
|
return JSON.stringify(/^:/.test(o) ? ':' + o : o)
|
|
} else if ('undefined' === typeof o) {
|
|
return 'null';
|
|
} else
|
|
return JSON.stringify(o)
|
|
}
|
|
|
|
exports.parse = function (s) {
|
|
return JSON.parse(s, function (key, value) {
|
|
if('string' === typeof value) {
|
|
if(/^:base64:/.test(value))
|
|
return Buffer.from(value.substring(8), 'base64')
|
|
else
|
|
return /^:/.test(value) ? value.substring(1) : value
|
|
}
|
|
return value
|
|
})
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1531:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const EventEmitter = __nccwpck_require__(2361);
|
|
const JSONB = __nccwpck_require__(2820);
|
|
const compressBrotli = __nccwpck_require__(5728);
|
|
|
|
const loadStore = options => {
|
|
const adapters = {
|
|
redis: '@keyv/redis',
|
|
rediss: '@keyv/redis',
|
|
mongodb: '@keyv/mongo',
|
|
mongo: '@keyv/mongo',
|
|
sqlite: '@keyv/sqlite',
|
|
postgresql: '@keyv/postgres',
|
|
postgres: '@keyv/postgres',
|
|
mysql: '@keyv/mysql',
|
|
etcd: '@keyv/etcd',
|
|
offline: '@keyv/offline',
|
|
tiered: '@keyv/tiered',
|
|
};
|
|
if (options.adapter || options.uri) {
|
|
const adapter = options.adapter || /^[^:+]*/.exec(options.uri)[0];
|
|
return new (require(adapters[adapter]))(options);
|
|
}
|
|
|
|
return new Map();
|
|
};
|
|
|
|
const iterableAdapters = [
|
|
'sqlite',
|
|
'postgres',
|
|
'mysql',
|
|
'mongo',
|
|
'redis',
|
|
'tiered',
|
|
];
|
|
|
|
class Keyv extends EventEmitter {
|
|
constructor(uri, {emitErrors = true, ...options} = {}) {
|
|
super();
|
|
this.opts = {
|
|
namespace: 'keyv',
|
|
serialize: JSONB.stringify,
|
|
deserialize: JSONB.parse,
|
|
...((typeof uri === 'string') ? {uri} : uri),
|
|
...options,
|
|
};
|
|
|
|
if (!this.opts.store) {
|
|
const adapterOptions = {...this.opts};
|
|
this.opts.store = loadStore(adapterOptions);
|
|
}
|
|
|
|
if (this.opts.compress) {
|
|
const brotli = compressBrotli(this.opts.compress.opts);
|
|
this.opts.serialize = async ({value, expires}) => brotli.serialize({value: await brotli.compress(value), expires});
|
|
this.opts.deserialize = async data => {
|
|
const {value, expires} = brotli.deserialize(data);
|
|
return {value: await brotli.decompress(value), expires};
|
|
};
|
|
}
|
|
|
|
if (typeof this.opts.store.on === 'function' && emitErrors) {
|
|
this.opts.store.on('error', error => this.emit('error', error));
|
|
}
|
|
|
|
this.opts.store.namespace = this.opts.namespace;
|
|
|
|
const generateIterator = iterator => async function * () {
|
|
for await (const [key, raw] of typeof iterator === 'function'
|
|
? iterator(this.opts.store.namespace)
|
|
: iterator) {
|
|
const data = this.opts.deserialize(raw);
|
|
if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
|
|
continue;
|
|
}
|
|
|
|
if (typeof data.expires === 'number' && Date.now() > data.expires) {
|
|
this.delete(key);
|
|
continue;
|
|
}
|
|
|
|
yield [this._getKeyUnprefix(key), data.value];
|
|
}
|
|
};
|
|
|
|
// Attach iterators
|
|
if (typeof this.opts.store[Symbol.iterator] === 'function' && this.opts.store instanceof Map) {
|
|
this.iterator = generateIterator(this.opts.store);
|
|
} else if (typeof this.opts.store.iterator === 'function' && this.opts.store.opts
|
|
&& this._checkIterableAdaptar()) {
|
|
this.iterator = generateIterator(this.opts.store.iterator.bind(this.opts.store));
|
|
}
|
|
}
|
|
|
|
_checkIterableAdaptar() {
|
|
return iterableAdapters.includes(this.opts.store.opts.dialect)
|
|
|| iterableAdapters.findIndex(element => this.opts.store.opts.url.includes(element)) >= 0;
|
|
}
|
|
|
|
_getKeyPrefix(key) {
|
|
return `${this.opts.namespace}:${key}`;
|
|
}
|
|
|
|
_getKeyPrefixArray(keys) {
|
|
return keys.map(key => `${this.opts.namespace}:${key}`);
|
|
}
|
|
|
|
_getKeyUnprefix(key) {
|
|
return key
|
|
.split(':')
|
|
.splice(1)
|
|
.join(':');
|
|
}
|
|
|
|
get(key, options) {
|
|
const {store} = this.opts;
|
|
const isArray = Array.isArray(key);
|
|
const keyPrefixed = isArray ? this._getKeyPrefixArray(key) : this._getKeyPrefix(key);
|
|
if (isArray && store.getMany === undefined) {
|
|
const promises = [];
|
|
for (const key of keyPrefixed) {
|
|
promises.push(Promise.resolve()
|
|
.then(() => store.get(key))
|
|
.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
|
|
.then(data => {
|
|
if (data === undefined || data === null) {
|
|
return undefined;
|
|
}
|
|
|
|
if (typeof data.expires === 'number' && Date.now() > data.expires) {
|
|
return this.delete(key).then(() => undefined);
|
|
}
|
|
|
|
return (options && options.raw) ? data : data.value;
|
|
}),
|
|
);
|
|
}
|
|
|
|
return Promise.allSettled(promises)
|
|
.then(values => {
|
|
const data = [];
|
|
for (const value of values) {
|
|
data.push(value.value);
|
|
}
|
|
|
|
return data.every(x => x === undefined) ? [] : data;
|
|
});
|
|
}
|
|
|
|
return Promise.resolve()
|
|
.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))
|
|
.then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
|
|
.then(data => {
|
|
if (data === undefined || data === null) {
|
|
return undefined;
|
|
}
|
|
|
|
if (isArray) {
|
|
const result = [];
|
|
|
|
if (data.length === 0) {
|
|
return [];
|
|
}
|
|
|
|
for (let row of data) {
|
|
if ((typeof row === 'string')) {
|
|
row = this.opts.deserialize(row);
|
|
}
|
|
|
|
if (row === undefined || row === null) {
|
|
result.push(undefined);
|
|
continue;
|
|
}
|
|
|
|
if (typeof row.expires === 'number' && Date.now() > row.expires) {
|
|
this.delete(key).then(() => undefined);
|
|
result.push(undefined);
|
|
} else {
|
|
result.push((options && options.raw) ? row : row.value);
|
|
}
|
|
}
|
|
|
|
return result.every(x => x === undefined) ? [] : result;
|
|
}
|
|
|
|
if (typeof data.expires === 'number' && Date.now() > data.expires) {
|
|
return this.delete(key).then(() => undefined);
|
|
}
|
|
|
|
return (options && options.raw) ? data : data.value;
|
|
});
|
|
}
|
|
|
|
set(key, value, ttl) {
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
if (typeof ttl === 'undefined') {
|
|
ttl = this.opts.ttl;
|
|
}
|
|
|
|
if (ttl === 0) {
|
|
ttl = undefined;
|
|
}
|
|
|
|
const {store} = this.opts;
|
|
|
|
return Promise.resolve()
|
|
.then(() => {
|
|
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;
|
|
if (typeof value === 'symbol') {
|
|
this.emit('error', 'symbol cannot be serialized');
|
|
}
|
|
|
|
value = {value, expires};
|
|
return this.opts.serialize(value);
|
|
})
|
|
.then(value => store.set(keyPrefixed, value, ttl))
|
|
.then(() => true);
|
|
}
|
|
|
|
delete(key) {
|
|
const {store} = this.opts;
|
|
if (Array.isArray(key)) {
|
|
const keyPrefixed = this._getKeyPrefixArray(key);
|
|
if (store.deleteMany === undefined) {
|
|
const promises = [];
|
|
for (const key of keyPrefixed) {
|
|
promises.push(store.delete(key));
|
|
}
|
|
|
|
return Promise.allSettled(promises)
|
|
.then(values => values.every(x => x.value === true));
|
|
}
|
|
|
|
return Promise.resolve()
|
|
.then(() => store.deleteMany(keyPrefixed));
|
|
}
|
|
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
return Promise.resolve()
|
|
.then(() => store.delete(keyPrefixed));
|
|
}
|
|
|
|
clear() {
|
|
const {store} = this.opts;
|
|
return Promise.resolve()
|
|
.then(() => store.clear());
|
|
}
|
|
|
|
has(key) {
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
const {store} = this.opts;
|
|
return Promise.resolve()
|
|
.then(async () => {
|
|
if (typeof store.has === 'function') {
|
|
return store.has(keyPrefixed);
|
|
}
|
|
|
|
const value = await store.get(keyPrefixed);
|
|
return value !== undefined;
|
|
});
|
|
}
|
|
|
|
disconnect() {
|
|
const {store} = this.opts;
|
|
if (typeof store.disconnect === 'function') {
|
|
return store.disconnect();
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = Keyv;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2578:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* merge2
|
|
* https://github.com/teambition/merge2
|
|
*
|
|
* Copyright (c) 2014-2020 Teambition
|
|
* Licensed under the MIT license.
|
|
*/
|
|
const Stream = __nccwpck_require__(2781)
|
|
const PassThrough = Stream.PassThrough
|
|
const slice = Array.prototype.slice
|
|
|
|
module.exports = merge2
|
|
|
|
function merge2 () {
|
|
const streamsQueue = []
|
|
const args = slice.call(arguments)
|
|
let merging = false
|
|
let options = args[args.length - 1]
|
|
|
|
if (options && !Array.isArray(options) && options.pipe == null) {
|
|
args.pop()
|
|
} else {
|
|
options = {}
|
|
}
|
|
|
|
const doEnd = options.end !== false
|
|
const doPipeError = options.pipeError === true
|
|
if (options.objectMode == null) {
|
|
options.objectMode = true
|
|
}
|
|
if (options.highWaterMark == null) {
|
|
options.highWaterMark = 64 * 1024
|
|
}
|
|
const mergedStream = PassThrough(options)
|
|
|
|
function addStream () {
|
|
for (let i = 0, len = arguments.length; i < len; i++) {
|
|
streamsQueue.push(pauseStreams(arguments[i], options))
|
|
}
|
|
mergeStream()
|
|
return this
|
|
}
|
|
|
|
function mergeStream () {
|
|
if (merging) {
|
|
return
|
|
}
|
|
merging = true
|
|
|
|
let streams = streamsQueue.shift()
|
|
if (!streams) {
|
|
process.nextTick(endStream)
|
|
return
|
|
}
|
|
if (!Array.isArray(streams)) {
|
|
streams = [streams]
|
|
}
|
|
|
|
let pipesCount = streams.length + 1
|
|
|
|
function next () {
|
|
if (--pipesCount > 0) {
|
|
return
|
|
}
|
|
merging = false
|
|
mergeStream()
|
|
}
|
|
|
|
function pipe (stream) {
|
|
function onend () {
|
|
stream.removeListener('merge2UnpipeEnd', onend)
|
|
stream.removeListener('end', onend)
|
|
if (doPipeError) {
|
|
stream.removeListener('error', onerror)
|
|
}
|
|
next()
|
|
}
|
|
function onerror (err) {
|
|
mergedStream.emit('error', err)
|
|
}
|
|
// skip ended stream
|
|
if (stream._readableState.endEmitted) {
|
|
return next()
|
|
}
|
|
|
|
stream.on('merge2UnpipeEnd', onend)
|
|
stream.on('end', onend)
|
|
|
|
if (doPipeError) {
|
|
stream.on('error', onerror)
|
|
}
|
|
|
|
stream.pipe(mergedStream, { end: false })
|
|
// compatible for old stream
|
|
stream.resume()
|
|
}
|
|
|
|
for (let i = 0; i < streams.length; i++) {
|
|
pipe(streams[i])
|
|
}
|
|
|
|
next()
|
|
}
|
|
|
|
function endStream () {
|
|
merging = false
|
|
// emit 'queueDrain' when all streams merged.
|
|
mergedStream.emit('queueDrain')
|
|
if (doEnd) {
|
|
mergedStream.end()
|
|
}
|
|
}
|
|
|
|
mergedStream.setMaxListeners(0)
|
|
mergedStream.add = addStream
|
|
mergedStream.on('unpipe', function (stream) {
|
|
stream.emit('merge2UnpipeEnd')
|
|
})
|
|
|
|
if (args.length) {
|
|
addStream.apply(null, args)
|
|
}
|
|
return mergedStream
|
|
}
|
|
|
|
// check and pause streams for pipe.
|
|
function pauseStreams (streams, options) {
|
|
if (!Array.isArray(streams)) {
|
|
// Backwards-compat with old-style streams
|
|
if (!streams._readableState && streams.pipe) {
|
|
streams = streams.pipe(PassThrough(options))
|
|
}
|
|
if (!streams._readableState || !streams.pause || !streams.pipe) {
|
|
throw new Error('Only readable stream can be merged.')
|
|
}
|
|
streams.pause()
|
|
} else {
|
|
for (let i = 0, len = streams.length; i < len; i++) {
|
|
streams[i] = pauseStreams(streams[i], options)
|
|
}
|
|
}
|
|
return streams
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6228:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const util = __nccwpck_require__(3837);
|
|
const braces = __nccwpck_require__(610);
|
|
const picomatch = __nccwpck_require__(8569);
|
|
const utils = __nccwpck_require__(479);
|
|
const isEmptyString = val => val === '' || val === './';
|
|
|
|
/**
|
|
* Returns an array of strings that match one or more glob patterns.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm(list, patterns[, options]);
|
|
*
|
|
* console.log(mm(['a.js', 'a.txt'], ['*.js']));
|
|
* //=> [ 'a.js' ]
|
|
* ```
|
|
* @param {String|Array<string>} `list` List of strings to match.
|
|
* @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `options` See available [options](#options)
|
|
* @return {Array} Returns an array of matches
|
|
* @summary false
|
|
* @api public
|
|
*/
|
|
|
|
const micromatch = (list, patterns, options) => {
|
|
patterns = [].concat(patterns);
|
|
list = [].concat(list);
|
|
|
|
let omit = new Set();
|
|
let keep = new Set();
|
|
let items = new Set();
|
|
let negatives = 0;
|
|
|
|
let onResult = state => {
|
|
items.add(state.output);
|
|
if (options && options.onResult) {
|
|
options.onResult(state);
|
|
}
|
|
};
|
|
|
|
for (let i = 0; i < patterns.length; i++) {
|
|
let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
|
|
let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
|
|
if (negated) negatives++;
|
|
|
|
for (let item of list) {
|
|
let matched = isMatch(item, true);
|
|
|
|
let match = negated ? !matched.isMatch : matched.isMatch;
|
|
if (!match) continue;
|
|
|
|
if (negated) {
|
|
omit.add(matched.output);
|
|
} else {
|
|
omit.delete(matched.output);
|
|
keep.add(matched.output);
|
|
}
|
|
}
|
|
}
|
|
|
|
let result = negatives === patterns.length ? [...items] : [...keep];
|
|
let matches = result.filter(item => !omit.has(item));
|
|
|
|
if (options && matches.length === 0) {
|
|
if (options.failglob === true) {
|
|
throw new Error(`No matches found for "${patterns.join(', ')}"`);
|
|
}
|
|
|
|
if (options.nonull === true || options.nullglob === true) {
|
|
return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
|
|
}
|
|
}
|
|
|
|
return matches;
|
|
};
|
|
|
|
/**
|
|
* Backwards compatibility
|
|
*/
|
|
|
|
micromatch.match = micromatch;
|
|
|
|
/**
|
|
* Returns a matcher function from the given glob `pattern` and `options`.
|
|
* The returned function takes a string to match as its only argument and returns
|
|
* true if the string is a match.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.matcher(pattern[, options]);
|
|
*
|
|
* const isMatch = mm.matcher('*.!(*a)');
|
|
* console.log(isMatch('a.a')); //=> false
|
|
* console.log(isMatch('a.b')); //=> true
|
|
* ```
|
|
* @param {String} `pattern` Glob pattern
|
|
* @param {Object} `options`
|
|
* @return {Function} Returns a matcher function.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.matcher = (pattern, options) => picomatch(pattern, options);
|
|
|
|
/**
|
|
* Returns true if **any** of the given glob `patterns` match the specified `string`.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.isMatch(string, patterns[, options]);
|
|
*
|
|
* console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
|
|
* console.log(mm.isMatch('a.a', 'b.*')); //=> false
|
|
* ```
|
|
* @param {String} `str` The string to test.
|
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `[options]` See available [options](#options).
|
|
* @return {Boolean} Returns true if any patterns match `str`
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
|
|
|
|
/**
|
|
* Backwards compatibility
|
|
*/
|
|
|
|
micromatch.any = micromatch.isMatch;
|
|
|
|
/**
|
|
* Returns a list of strings that _**do not match any**_ of the given `patterns`.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.not(list, patterns[, options]);
|
|
*
|
|
* console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
|
|
* //=> ['b.b', 'c.c']
|
|
* ```
|
|
* @param {Array} `list` Array of strings to match.
|
|
* @param {String|Array} `patterns` One or more glob pattern to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Array} Returns an array of strings that **do not match** the given patterns.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.not = (list, patterns, options = {}) => {
|
|
patterns = [].concat(patterns).map(String);
|
|
let result = new Set();
|
|
let items = [];
|
|
|
|
let onResult = state => {
|
|
if (options.onResult) options.onResult(state);
|
|
items.push(state.output);
|
|
};
|
|
|
|
let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
|
|
|
|
for (let item of items) {
|
|
if (!matches.has(item)) {
|
|
result.add(item);
|
|
}
|
|
}
|
|
return [...result];
|
|
};
|
|
|
|
/**
|
|
* Returns true if the given `string` contains the given pattern. Similar
|
|
* to [.isMatch](#isMatch) but the pattern can match any part of the string.
|
|
*
|
|
* ```js
|
|
* var mm = require('micromatch');
|
|
* // mm.contains(string, pattern[, options]);
|
|
*
|
|
* console.log(mm.contains('aa/bb/cc', '*b'));
|
|
* //=> true
|
|
* console.log(mm.contains('aa/bb/cc', '*d'));
|
|
* //=> false
|
|
* ```
|
|
* @param {String} `str` The string to match.
|
|
* @param {String|Array} `patterns` Glob pattern to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Boolean} Returns true if any of the patterns matches any part of `str`.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.contains = (str, pattern, options) => {
|
|
if (typeof str !== 'string') {
|
|
throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
|
|
}
|
|
|
|
if (Array.isArray(pattern)) {
|
|
return pattern.some(p => micromatch.contains(str, p, options));
|
|
}
|
|
|
|
if (typeof pattern === 'string') {
|
|
if (isEmptyString(str) || isEmptyString(pattern)) {
|
|
return false;
|
|
}
|
|
|
|
if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return micromatch.isMatch(str, pattern, { ...options, contains: true });
|
|
};
|
|
|
|
/**
|
|
* Filter the keys of the given object with the given `glob` pattern
|
|
* and `options`. Does not attempt to match nested keys. If you need this feature,
|
|
* use [glob-object][] instead.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.matchKeys(object, patterns[, options]);
|
|
*
|
|
* const obj = { aa: 'a', ab: 'b', ac: 'c' };
|
|
* console.log(mm.matchKeys(obj, '*b'));
|
|
* //=> { ab: 'b' }
|
|
* ```
|
|
* @param {Object} `object` The object with keys to filter.
|
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Object} Returns an object with only keys that match the given patterns.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.matchKeys = (obj, patterns, options) => {
|
|
if (!utils.isObject(obj)) {
|
|
throw new TypeError('Expected the first argument to be an object');
|
|
}
|
|
let keys = micromatch(Object.keys(obj), patterns, options);
|
|
let res = {};
|
|
for (let key of keys) res[key] = obj[key];
|
|
return res;
|
|
};
|
|
|
|
/**
|
|
* Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.some(list, patterns[, options]);
|
|
*
|
|
* console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
|
|
* // true
|
|
* console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
|
|
* // false
|
|
* ```
|
|
* @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
|
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.some = (list, patterns, options) => {
|
|
let items = [].concat(list);
|
|
|
|
for (let pattern of [].concat(patterns)) {
|
|
let isMatch = picomatch(String(pattern), options);
|
|
if (items.some(item => isMatch(item))) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Returns true if every string in the given `list` matches
|
|
* any of the given glob `patterns`.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.every(list, patterns[, options]);
|
|
*
|
|
* console.log(mm.every('foo.js', ['foo.js']));
|
|
* // true
|
|
* console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
|
|
* // true
|
|
* console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
|
|
* // false
|
|
* console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
|
|
* // false
|
|
* ```
|
|
* @param {String|Array} `list` The string or array of strings to test.
|
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.every = (list, patterns, options) => {
|
|
let items = [].concat(list);
|
|
|
|
for (let pattern of [].concat(patterns)) {
|
|
let isMatch = picomatch(String(pattern), options);
|
|
if (!items.every(item => isMatch(item))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Returns true if **all** of the given `patterns` match
|
|
* the specified string.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.all(string, patterns[, options]);
|
|
*
|
|
* console.log(mm.all('foo.js', ['foo.js']));
|
|
* // true
|
|
*
|
|
* console.log(mm.all('foo.js', ['*.js', '!foo.js']));
|
|
* // false
|
|
*
|
|
* console.log(mm.all('foo.js', ['*.js', 'foo.js']));
|
|
* // true
|
|
*
|
|
* console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
|
|
* // true
|
|
* ```
|
|
* @param {String|Array} `str` The string to test.
|
|
* @param {String|Array} `patterns` One or more glob patterns to use for matching.
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Boolean} Returns true if any patterns match `str`
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.all = (str, patterns, options) => {
|
|
if (typeof str !== 'string') {
|
|
throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
|
|
}
|
|
|
|
return [].concat(patterns).every(p => picomatch(p, options)(str));
|
|
};
|
|
|
|
/**
|
|
* Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.capture(pattern, string[, options]);
|
|
*
|
|
* console.log(mm.capture('test/*.js', 'test/foo.js'));
|
|
* //=> ['foo']
|
|
* console.log(mm.capture('test/*.js', 'foo/bar.css'));
|
|
* //=> null
|
|
* ```
|
|
* @param {String} `glob` Glob pattern to use for matching.
|
|
* @param {String} `input` String to match
|
|
* @param {Object} `options` See available [options](#options) for changing how matches are performed
|
|
* @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.capture = (glob, input, options) => {
|
|
let posix = utils.isWindows(options);
|
|
let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
|
|
let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
|
|
|
|
if (match) {
|
|
return match.slice(1).map(v => v === void 0 ? '' : v);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Create a regular expression from the given glob `pattern`.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* // mm.makeRe(pattern[, options]);
|
|
*
|
|
* console.log(mm.makeRe('*.js'));
|
|
* //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
|
|
* ```
|
|
* @param {String} `pattern` A glob pattern to convert to regex.
|
|
* @param {Object} `options`
|
|
* @return {RegExp} Returns a regex created from the given pattern.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.makeRe = (...args) => picomatch.makeRe(...args);
|
|
|
|
/**
|
|
* Scan a glob pattern to separate the pattern into segments. Used
|
|
* by the [split](#split) method.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* const state = mm.scan(pattern[, options]);
|
|
* ```
|
|
* @param {String} `pattern`
|
|
* @param {Object} `options`
|
|
* @return {Object} Returns an object with
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.scan = (...args) => picomatch.scan(...args);
|
|
|
|
/**
|
|
* Parse a glob pattern to create the source string for a regular
|
|
* expression.
|
|
*
|
|
* ```js
|
|
* const mm = require('micromatch');
|
|
* const state = mm.parse(pattern[, options]);
|
|
* ```
|
|
* @param {String} `glob`
|
|
* @param {Object} `options`
|
|
* @return {Object} Returns an object with useful properties and output to be used as regex source string.
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.parse = (patterns, options) => {
|
|
let res = [];
|
|
for (let pattern of [].concat(patterns || [])) {
|
|
for (let str of braces(String(pattern), options)) {
|
|
res.push(picomatch.parse(str, options));
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
|
|
/**
|
|
* Process the given brace `pattern`.
|
|
*
|
|
* ```js
|
|
* const { braces } = require('micromatch');
|
|
* console.log(braces('foo/{a,b,c}/bar'));
|
|
* //=> [ 'foo/(a|b|c)/bar' ]
|
|
*
|
|
* console.log(braces('foo/{a,b,c}/bar', { expand: true }));
|
|
* //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
|
|
* ```
|
|
* @param {String} `pattern` String with brace pattern to process.
|
|
* @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
|
|
* @return {Array}
|
|
* @api public
|
|
*/
|
|
|
|
micromatch.braces = (pattern, options) => {
|
|
if (typeof pattern !== 'string') throw new TypeError('Expected a string');
|
|
if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
|
|
return [pattern];
|
|
}
|
|
return braces(pattern, options);
|
|
};
|
|
|
|
/**
|
|
* Expand braces
|
|
*/
|
|
|
|
micromatch.braceExpand = (pattern, options) => {
|
|
if (typeof pattern !== 'string') throw new TypeError('Expected a string');
|
|
return micromatch.braces(pattern, { ...options, expand: true });
|
|
};
|
|
|
|
/**
|
|
* Expose micromatch
|
|
*/
|
|
|
|
module.exports = micromatch;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2610:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
// We define these manually to ensure they're always copied
|
|
// even if they would move up the prototype chain
|
|
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
|
|
const knownProps = [
|
|
'destroy',
|
|
'setTimeout',
|
|
'socket',
|
|
'headers',
|
|
'trailers',
|
|
'rawHeaders',
|
|
'statusCode',
|
|
'httpVersion',
|
|
'httpVersionMinor',
|
|
'httpVersionMajor',
|
|
'rawTrailers',
|
|
'statusMessage'
|
|
];
|
|
|
|
module.exports = (fromStream, toStream) => {
|
|
const fromProps = new Set(Object.keys(fromStream).concat(knownProps));
|
|
|
|
for (const prop of fromProps) {
|
|
// Don't overwrite existing properties
|
|
if (prop in toStream) {
|
|
continue;
|
|
}
|
|
|
|
toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 467:
|
|
/***/ ((module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
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));
|
|
|
|
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
|
|
|
|
// fix for "Readable" isn't a named export issue
|
|
const Readable = Stream.Readable;
|
|
|
|
const BUFFER = Symbol('buffer');
|
|
const TYPE = Symbol('type');
|
|
|
|
class Blob {
|
|
constructor() {
|
|
this[TYPE] = '';
|
|
|
|
const blobParts = arguments[0];
|
|
const options = arguments[1];
|
|
|
|
const buffers = [];
|
|
let size = 0;
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
Object.defineProperties(Blob.prototype, {
|
|
size: { enumerable: true },
|
|
type: { enumerable: true },
|
|
slice: { enumerable: true }
|
|
});
|
|
|
|
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
|
|
value: 'Blob',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
/**
|
|
* fetch-error.js
|
|
*
|
|
* FetchError interface for operational errors
|
|
*/
|
|
|
|
/**
|
|
* Create FetchError instance
|
|
*
|
|
* @param String message Error message for human
|
|
* @param String type Error type for machine
|
|
* @param String systemError For Node.js system error
|
|
* @return FetchError
|
|
*/
|
|
function FetchError(message, type, systemError) {
|
|
Error.call(this, message);
|
|
|
|
this.message = message;
|
|
this.type = type;
|
|
|
|
// when err.type is `system`, err.code contains system error code
|
|
if (systemError) {
|
|
this.code = this.errno = systemError.code;
|
|
}
|
|
|
|
// hide custom error implementation details from end-users
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
|
|
FetchError.prototype = Object.create(Error.prototype);
|
|
FetchError.prototype.constructor = FetchError;
|
|
FetchError.prototype.name = 'FetchError';
|
|
|
|
let convert;
|
|
try {
|
|
convert = (__nccwpck_require__(2877).convert);
|
|
} catch (e) {}
|
|
|
|
const INTERNALS = Symbol('Body internals');
|
|
|
|
// fix an issue where "PassThrough" isn't a named export for node <10
|
|
const PassThrough = Stream.PassThrough;
|
|
|
|
/**
|
|
* Body mixin
|
|
*
|
|
* Ref: https://fetch.spec.whatwg.org/#body
|
|
*
|
|
* @param Stream body Readable stream
|
|
* @param Object opts Response options
|
|
* @return Void
|
|
*/
|
|
function Body(body) {
|
|
var _this = this;
|
|
|
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
_ref$size = _ref.size;
|
|
|
|
let size = _ref$size === undefined ? 0 : _ref$size;
|
|
var _ref$timeout = _ref.timeout;
|
|
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
|
|
|
|
if (body == null) {
|
|
// body is undefined or null
|
|
body = null;
|
|
} else if (isURLSearchParams(body)) {
|
|
// body is a URLSearchParams
|
|
body = Buffer.from(body.toString());
|
|
} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
|
|
// body is ArrayBuffer
|
|
body = Buffer.from(body);
|
|
} else if (ArrayBuffer.isView(body)) {
|
|
// body is ArrayBufferView
|
|
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
|
|
} else if (body instanceof Stream) ; else {
|
|
// none of the above
|
|
// coerce to string then buffer
|
|
body = Buffer.from(String(body));
|
|
}
|
|
this[INTERNALS] = {
|
|
body,
|
|
disturbed: false,
|
|
error: null
|
|
};
|
|
this.size = size;
|
|
this.timeout = timeout;
|
|
|
|
if (body instanceof Stream) {
|
|
body.on('error', function (err) {
|
|
const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
|
|
_this[INTERNALS].error = error;
|
|
});
|
|
}
|
|
}
|
|
|
|
Body.prototype = {
|
|
get body() {
|
|
return this[INTERNALS].body;
|
|
},
|
|
|
|
get bodyUsed() {
|
|
return this[INTERNALS].disturbed;
|
|
},
|
|
|
|
/**
|
|
* Decode response as ArrayBuffer
|
|
*
|
|
* @return Promise
|
|
*/
|
|
arrayBuffer() {
|
|
return consumeBody.call(this).then(function (buf) {
|
|
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Return raw response as Blob
|
|
*
|
|
* @return Promise
|
|
*/
|
|
blob() {
|
|
let ct = this.headers && this.headers.get('content-type') || '';
|
|
return consumeBody.call(this).then(function (buf) {
|
|
return Object.assign(
|
|
// Prevent copying
|
|
new Blob([], {
|
|
type: ct.toLowerCase()
|
|
}), {
|
|
[BUFFER]: buf
|
|
});
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as json
|
|
*
|
|
* @return Promise
|
|
*/
|
|
json() {
|
|
var _this2 = this;
|
|
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
try {
|
|
return JSON.parse(buffer.toString());
|
|
} catch (err) {
|
|
return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as text
|
|
*
|
|
* @return Promise
|
|
*/
|
|
text() {
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
return buffer.toString();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as buffer (non-spec api)
|
|
*
|
|
* @return Promise
|
|
*/
|
|
buffer() {
|
|
return consumeBody.call(this);
|
|
},
|
|
|
|
/**
|
|
* Decode response as text, while automatically detecting the encoding and
|
|
* trying to decode to UTF-8 (non-spec api)
|
|
*
|
|
* @return Promise
|
|
*/
|
|
textConverted() {
|
|
var _this3 = this;
|
|
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
return convertBody(buffer, _this3.headers);
|
|
});
|
|
}
|
|
};
|
|
|
|
// In browsers, all properties are enumerable.
|
|
Object.defineProperties(Body.prototype, {
|
|
body: { enumerable: true },
|
|
bodyUsed: { enumerable: true },
|
|
arrayBuffer: { enumerable: true },
|
|
blob: { enumerable: true },
|
|
json: { enumerable: true },
|
|
text: { enumerable: true }
|
|
});
|
|
|
|
Body.mixIn = function (proto) {
|
|
for (const name of Object.getOwnPropertyNames(Body.prototype)) {
|
|
// istanbul ignore else: future proof
|
|
if (!(name in proto)) {
|
|
const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
|
|
Object.defineProperty(proto, name, desc);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Consume and convert an entire Body to a Buffer.
|
|
*
|
|
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
|
|
*
|
|
* @return Promise
|
|
*/
|
|
function consumeBody() {
|
|
var _this4 = this;
|
|
|
|
if (this[INTERNALS].disturbed) {
|
|
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
|
|
}
|
|
|
|
this[INTERNALS].disturbed = true;
|
|
|
|
if (this[INTERNALS].error) {
|
|
return Body.Promise.reject(this[INTERNALS].error);
|
|
}
|
|
|
|
let body = this.body;
|
|
|
|
// body is null
|
|
if (body === null) {
|
|
return Body.Promise.resolve(Buffer.alloc(0));
|
|
}
|
|
|
|
// body is blob
|
|
if (isBlob(body)) {
|
|
body = body.stream();
|
|
}
|
|
|
|
// body is buffer
|
|
if (Buffer.isBuffer(body)) {
|
|
return Body.Promise.resolve(body);
|
|
}
|
|
|
|
// istanbul ignore if: should never happen
|
|
if (!(body instanceof Stream)) {
|
|
return Body.Promise.resolve(Buffer.alloc(0));
|
|
}
|
|
|
|
// body is stream
|
|
// get ready to actually consume the body
|
|
let accum = [];
|
|
let accumBytes = 0;
|
|
let abort = false;
|
|
|
|
return new Body.Promise(function (resolve, reject) {
|
|
let resTimeout;
|
|
|
|
// allow timeout on slow response body
|
|
if (_this4.timeout) {
|
|
resTimeout = setTimeout(function () {
|
|
abort = true;
|
|
reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
|
|
}, _this4.timeout);
|
|
}
|
|
|
|
// handle stream errors
|
|
body.on('error', function (err) {
|
|
if (err.name === 'AbortError') {
|
|
// if the request was aborted, reject with this Error
|
|
abort = true;
|
|
reject(err);
|
|
} else {
|
|
// other errors, such as incorrect content-encoding
|
|
reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
|
|
}
|
|
});
|
|
|
|
body.on('data', function (chunk) {
|
|
if (abort || chunk === null) {
|
|
return;
|
|
}
|
|
|
|
if (_this4.size && accumBytes + chunk.length > _this4.size) {
|
|
abort = true;
|
|
reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
|
|
return;
|
|
}
|
|
|
|
accumBytes += chunk.length;
|
|
accum.push(chunk);
|
|
});
|
|
|
|
body.on('end', function () {
|
|
if (abort) {
|
|
return;
|
|
}
|
|
|
|
clearTimeout(resTimeout);
|
|
|
|
try {
|
|
resolve(Buffer.concat(accum, accumBytes));
|
|
} catch (err) {
|
|
// handle streams that have accumulated too much data (issue #414)
|
|
reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Detect buffer encoding and convert to target encoding
|
|
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
|
|
*
|
|
* @param Buffer buffer Incoming buffer
|
|
* @param String encoding Target encoding
|
|
* @return String
|
|
*/
|
|
function convertBody(buffer, headers) {
|
|
if (typeof convert !== 'function') {
|
|
throw new Error('The package `encoding` must be installed to use the textConverted() function');
|
|
}
|
|
|
|
const ct = headers.get('content-type');
|
|
let charset = 'utf-8';
|
|
let res, str;
|
|
|
|
// header
|
|
if (ct) {
|
|
res = /charset=([^;]*)/i.exec(ct);
|
|
}
|
|
|
|
// no charset in content type, peek at response body for at most 1024 bytes
|
|
str = buffer.slice(0, 1024).toString();
|
|
|
|
// html5
|
|
if (!res && str) {
|
|
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
|
|
}
|
|
|
|
// html4
|
|
if (!res && str) {
|
|
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
|
|
if (!res) {
|
|
res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
|
|
if (res) {
|
|
res.pop(); // drop last quote
|
|
}
|
|
}
|
|
|
|
if (res) {
|
|
res = /charset=(.*)/i.exec(res.pop());
|
|
}
|
|
}
|
|
|
|
// xml
|
|
if (!res && str) {
|
|
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
|
|
}
|
|
|
|
// found charset
|
|
if (res) {
|
|
charset = res.pop();
|
|
|
|
// prevent decode issues when sites use incorrect encoding
|
|
// ref: https://hsivonen.fi/encoding-menu/
|
|
if (charset === 'gb2312' || charset === 'gbk') {
|
|
charset = 'gb18030';
|
|
}
|
|
}
|
|
|
|
// turn raw buffers into a single utf-8 buffer
|
|
return convert(buffer, 'UTF-8', charset).toString();
|
|
}
|
|
|
|
/**
|
|
* Detect a URLSearchParams object
|
|
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
|
|
*
|
|
* @param Object obj Object to detect by type or brand
|
|
* @return String
|
|
*/
|
|
function isURLSearchParams(obj) {
|
|
// Duck-typing as a necessary condition.
|
|
if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
// Brand-checking and more duck-typing as optional condition.
|
|
return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
|
|
}
|
|
|
|
/**
|
|
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
|
|
* @param {*} obj
|
|
* @return {boolean}
|
|
*/
|
|
function isBlob(obj) {
|
|
return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
|
|
}
|
|
|
|
/**
|
|
* Clone body given Res/Req instance
|
|
*
|
|
* @param Mixed instance Response or Request instance
|
|
* @return Mixed
|
|
*/
|
|
function clone(instance) {
|
|
let p1, p2;
|
|
let body = instance.body;
|
|
|
|
// don't allow cloning a used body
|
|
if (instance.bodyUsed) {
|
|
throw new Error('cannot clone body after it is used');
|
|
}
|
|
|
|
// check that body is a stream and not form-data object
|
|
// note: we can't clone the form-data object without having it as a dependency
|
|
if (body instanceof Stream && typeof body.getBoundary !== 'function') {
|
|
// tee instance body
|
|
p1 = new PassThrough();
|
|
p2 = new PassThrough();
|
|
body.pipe(p1);
|
|
body.pipe(p2);
|
|
// set instance body to teed body and return the other teed body
|
|
instance[INTERNALS].body = p1;
|
|
body = p2;
|
|
}
|
|
|
|
return body;
|
|
}
|
|
|
|
/**
|
|
* Performs the operation "extract a `Content-Type` value from |object|" as
|
|
* specified in the specification:
|
|
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
|
|
*
|
|
* This function assumes that instance.body is present.
|
|
*
|
|
* @param Mixed instance Any options.body input
|
|
*/
|
|
function extractContentType(body) {
|
|
if (body === null) {
|
|
// body is null
|
|
return null;
|
|
} else if (typeof body === 'string') {
|
|
// body is string
|
|
return 'text/plain;charset=UTF-8';
|
|
} else if (isURLSearchParams(body)) {
|
|
// body is a URLSearchParams
|
|
return 'application/x-www-form-urlencoded;charset=UTF-8';
|
|
} else if (isBlob(body)) {
|
|
// body is blob
|
|
return body.type || null;
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
return null;
|
|
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
|
|
// body is ArrayBuffer
|
|
return null;
|
|
} else if (ArrayBuffer.isView(body)) {
|
|
// body is ArrayBufferView
|
|
return null;
|
|
} else if (typeof body.getBoundary === 'function') {
|
|
// detect form data input from form-data module
|
|
return `multipart/form-data;boundary=${body.getBoundary()}`;
|
|
} else if (body instanceof Stream) {
|
|
// body is stream
|
|
// can't really do much about this
|
|
return null;
|
|
} else {
|
|
// Body constructor defaults other things to string
|
|
return 'text/plain;charset=UTF-8';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The Fetch Standard treats this as if "total bytes" is a property on the body.
|
|
* For us, we have to explicitly get it with a function.
|
|
*
|
|
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
|
|
*
|
|
* @param Body instance Instance of Body
|
|
* @return Number? Number of bytes, or null if not possible
|
|
*/
|
|
function getTotalBytes(instance) {
|
|
const body = instance.body;
|
|
|
|
|
|
if (body === null) {
|
|
// body is null
|
|
return 0;
|
|
} else if (isBlob(body)) {
|
|
return body.size;
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
return body.length;
|
|
} else if (body && typeof body.getLengthSync === 'function') {
|
|
// detect form data input from form-data module
|
|
if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
|
|
body.hasKnownLength && body.hasKnownLength()) {
|
|
// 2.x
|
|
return body.getLengthSync();
|
|
}
|
|
return null;
|
|
} else {
|
|
// body is stream
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
|
|
*
|
|
* @param Body instance Instance of Body
|
|
* @return Void
|
|
*/
|
|
function writeToStream(dest, instance) {
|
|
const body = instance.body;
|
|
|
|
|
|
if (body === null) {
|
|
// body is null
|
|
dest.end();
|
|
} else if (isBlob(body)) {
|
|
body.stream().pipe(dest);
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
dest.write(body);
|
|
dest.end();
|
|
} else {
|
|
// body is stream
|
|
body.pipe(dest);
|
|
}
|
|
}
|
|
|
|
// expose Promise
|
|
Body.Promise = global.Promise;
|
|
|
|
/**
|
|
* headers.js
|
|
*
|
|
* Headers class offers convenient helpers
|
|
*/
|
|
|
|
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
|
|
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
|
|
|
|
function validateName(name) {
|
|
name = `${name}`;
|
|
if (invalidTokenRegex.test(name) || name === '') {
|
|
throw new TypeError(`${name} is not a legal HTTP header name`);
|
|
}
|
|
}
|
|
|
|
function validateValue(value) {
|
|
value = `${value}`;
|
|
if (invalidHeaderCharRegex.test(value)) {
|
|
throw new TypeError(`${value} is not a legal HTTP header value`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find the key in the map object given a header name.
|
|
*
|
|
* Returns undefined if not found.
|
|
*
|
|
* @param String name Header name
|
|
* @return String|Undefined
|
|
*/
|
|
function find(map, name) {
|
|
name = name.toLowerCase();
|
|
for (const key in map) {
|
|
if (key.toLowerCase() === name) {
|
|
return key;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
const MAP = Symbol('map');
|
|
class Headers {
|
|
/**
|
|
* Headers class
|
|
*
|
|
* @param Object headers Response headers
|
|
* @return Void
|
|
*/
|
|
constructor() {
|
|
let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
|
|
|
|
this[MAP] = Object.create(null);
|
|
|
|
if (init instanceof Headers) {
|
|
const rawHeaders = init.raw();
|
|
const headerNames = Object.keys(rawHeaders);
|
|
|
|
for (const headerName of headerNames) {
|
|
for (const value of rawHeaders[headerName]) {
|
|
this.append(headerName, value);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// We don't worry about converting prop to ByteString here as append()
|
|
// will handle it.
|
|
if (init == null) ; else if (typeof init === 'object') {
|
|
const method = init[Symbol.iterator];
|
|
if (method != null) {
|
|
if (typeof method !== 'function') {
|
|
throw new TypeError('Header pairs must be iterable');
|
|
}
|
|
|
|
// sequence<sequence<ByteString>>
|
|
// Note: per spec we have to first exhaust the lists then process them
|
|
const pairs = [];
|
|
for (const pair of init) {
|
|
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
|
|
throw new TypeError('Each header pair must be iterable');
|
|
}
|
|
pairs.push(Array.from(pair));
|
|
}
|
|
|
|
for (const pair of pairs) {
|
|
if (pair.length !== 2) {
|
|
throw new TypeError('Each header pair must be a name/value tuple');
|
|
}
|
|
this.append(pair[0], pair[1]);
|
|
}
|
|
} else {
|
|
// record<ByteString, ByteString>
|
|
for (const key of Object.keys(init)) {
|
|
const value = init[key];
|
|
this.append(key, value);
|
|
}
|
|
}
|
|
} else {
|
|
throw new TypeError('Provided initializer must be an object');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return combined header value given name
|
|
*
|
|
* @param String name Header name
|
|
* @return Mixed
|
|
*/
|
|
get(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
const key = find(this[MAP], name);
|
|
if (key === undefined) {
|
|
return null;
|
|
}
|
|
|
|
return this[MAP][key].join(', ');
|
|
}
|
|
|
|
/**
|
|
* Iterate over all headers
|
|
*
|
|
* @param Function callback Executed for each item with parameters (value, name, thisArg)
|
|
* @param Boolean thisArg `this` context for callback function
|
|
* @return Void
|
|
*/
|
|
forEach(callback) {
|
|
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
|
|
let pairs = getHeaders(this);
|
|
let i = 0;
|
|
while (i < pairs.length) {
|
|
var _pairs$i = pairs[i];
|
|
const name = _pairs$i[0],
|
|
value = _pairs$i[1];
|
|
|
|
callback.call(thisArg, value, name, this);
|
|
pairs = getHeaders(this);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Overwrite header values given name
|
|
*
|
|
* @param String name Header name
|
|
* @param String value Header value
|
|
* @return Void
|
|
*/
|
|
set(name, value) {
|
|
name = `${name}`;
|
|
value = `${value}`;
|
|
validateName(name);
|
|
validateValue(value);
|
|
const key = find(this[MAP], name);
|
|
this[MAP][key !== undefined ? key : name] = [value];
|
|
}
|
|
|
|
/**
|
|
* Append a value onto existing header
|
|
*
|
|
* @param String name Header name
|
|
* @param String value Header value
|
|
* @return Void
|
|
*/
|
|
append(name, value) {
|
|
name = `${name}`;
|
|
value = `${value}`;
|
|
validateName(name);
|
|
validateValue(value);
|
|
const key = find(this[MAP], name);
|
|
if (key !== undefined) {
|
|
this[MAP][key].push(value);
|
|
} else {
|
|
this[MAP][name] = [value];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check for header name existence
|
|
*
|
|
* @param String name Header name
|
|
* @return Boolean
|
|
*/
|
|
has(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
return find(this[MAP], name) !== undefined;
|
|
}
|
|
|
|
/**
|
|
* Delete all header values given name
|
|
*
|
|
* @param String name Header name
|
|
* @return Void
|
|
*/
|
|
delete(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
const key = find(this[MAP], name);
|
|
if (key !== undefined) {
|
|
delete this[MAP][key];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return raw headers (non-spec api)
|
|
*
|
|
* @return Object
|
|
*/
|
|
raw() {
|
|
return this[MAP];
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on keys.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
keys() {
|
|
return createHeadersIterator(this, 'key');
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on values.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
values() {
|
|
return createHeadersIterator(this, 'value');
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on entries.
|
|
*
|
|
* This is the default iterator of the Headers object.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
[Symbol.iterator]() {
|
|
return createHeadersIterator(this, 'key+value');
|
|
}
|
|
}
|
|
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
|
|
|
|
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
|
|
value: 'Headers',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperties(Headers.prototype, {
|
|
get: { enumerable: true },
|
|
forEach: { enumerable: true },
|
|
set: { enumerable: true },
|
|
append: { enumerable: true },
|
|
has: { enumerable: true },
|
|
delete: { enumerable: true },
|
|
keys: { enumerable: true },
|
|
values: { enumerable: true },
|
|
entries: { enumerable: true }
|
|
});
|
|
|
|
function getHeaders(headers) {
|
|
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
|
|
|
|
const keys = Object.keys(headers[MAP]).sort();
|
|
return keys.map(kind === 'key' ? function (k) {
|
|
return k.toLowerCase();
|
|
} : kind === 'value' ? function (k) {
|
|
return headers[MAP][k].join(', ');
|
|
} : function (k) {
|
|
return [k.toLowerCase(), headers[MAP][k].join(', ')];
|
|
});
|
|
}
|
|
|
|
const INTERNAL = Symbol('internal');
|
|
|
|
function createHeadersIterator(target, kind) {
|
|
const iterator = Object.create(HeadersIteratorPrototype);
|
|
iterator[INTERNAL] = {
|
|
target,
|
|
kind,
|
|
index: 0
|
|
};
|
|
return iterator;
|
|
}
|
|
|
|
const HeadersIteratorPrototype = Object.setPrototypeOf({
|
|
next() {
|
|
// istanbul ignore if
|
|
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
|
|
throw new TypeError('Value of `this` is not a HeadersIterator');
|
|
}
|
|
|
|
var _INTERNAL = this[INTERNAL];
|
|
const target = _INTERNAL.target,
|
|
kind = _INTERNAL.kind,
|
|
index = _INTERNAL.index;
|
|
|
|
const values = getHeaders(target, kind);
|
|
const len = values.length;
|
|
if (index >= len) {
|
|
return {
|
|
value: undefined,
|
|
done: true
|
|
};
|
|
}
|
|
|
|
this[INTERNAL].index = index + 1;
|
|
|
|
return {
|
|
value: values[index],
|
|
done: false
|
|
};
|
|
}
|
|
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
|
|
|
|
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
|
|
value: 'HeadersIterator',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
/**
|
|
* Export the Headers object in a form that Node.js can consume.
|
|
*
|
|
* @param Headers headers
|
|
* @return Object
|
|
*/
|
|
function exportNodeCompatibleHeaders(headers) {
|
|
const obj = Object.assign({ __proto__: null }, headers[MAP]);
|
|
|
|
// http.request() only supports string as Host header. This hack makes
|
|
// specifying custom Host header possible.
|
|
const hostHeaderKey = find(headers[MAP], 'Host');
|
|
if (hostHeaderKey !== undefined) {
|
|
obj[hostHeaderKey] = obj[hostHeaderKey][0];
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* Create a Headers object from an object of headers, ignoring those that do
|
|
* not conform to HTTP grammar productions.
|
|
*
|
|
* @param Object obj Object of headers
|
|
* @return Headers
|
|
*/
|
|
function createHeadersLenient(obj) {
|
|
const headers = new Headers();
|
|
for (const name of Object.keys(obj)) {
|
|
if (invalidTokenRegex.test(name)) {
|
|
continue;
|
|
}
|
|
if (Array.isArray(obj[name])) {
|
|
for (const val of obj[name]) {
|
|
if (invalidHeaderCharRegex.test(val)) {
|
|
continue;
|
|
}
|
|
if (headers[MAP][name] === undefined) {
|
|
headers[MAP][name] = [val];
|
|
} else {
|
|
headers[MAP][name].push(val);
|
|
}
|
|
}
|
|
} else if (!invalidHeaderCharRegex.test(obj[name])) {
|
|
headers[MAP][name] = [obj[name]];
|
|
}
|
|
}
|
|
return headers;
|
|
}
|
|
|
|
const INTERNALS$1 = Symbol('Response internals');
|
|
|
|
// fix an issue where "STATUS_CODES" aren't a named export for node <10
|
|
const STATUS_CODES = http.STATUS_CODES;
|
|
|
|
/**
|
|
* Response class
|
|
*
|
|
* @param Stream body Readable stream
|
|
* @param Object opts Response options
|
|
* @return Void
|
|
*/
|
|
class Response {
|
|
constructor() {
|
|
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
Body.call(this, body, opts);
|
|
|
|
const status = opts.status || 200;
|
|
const headers = new Headers(opts.headers);
|
|
|
|
if (body != null && !headers.has('Content-Type')) {
|
|
const contentType = extractContentType(body);
|
|
if (contentType) {
|
|
headers.append('Content-Type', contentType);
|
|
}
|
|
}
|
|
|
|
this[INTERNALS$1] = {
|
|
url: opts.url,
|
|
status,
|
|
statusText: opts.statusText || STATUS_CODES[status],
|
|
headers,
|
|
counter: opts.counter
|
|
};
|
|
}
|
|
|
|
get url() {
|
|
return this[INTERNALS$1].url || '';
|
|
}
|
|
|
|
get status() {
|
|
return this[INTERNALS$1].status;
|
|
}
|
|
|
|
/**
|
|
* Convenience property representing if the request ended normally
|
|
*/
|
|
get ok() {
|
|
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
|
|
}
|
|
|
|
get redirected() {
|
|
return this[INTERNALS$1].counter > 0;
|
|
}
|
|
|
|
get statusText() {
|
|
return this[INTERNALS$1].statusText;
|
|
}
|
|
|
|
get headers() {
|
|
return this[INTERNALS$1].headers;
|
|
}
|
|
|
|
/**
|
|
* Clone this response
|
|
*
|
|
* @return Response
|
|
*/
|
|
clone() {
|
|
return new Response(clone(this), {
|
|
url: this.url,
|
|
status: this.status,
|
|
statusText: this.statusText,
|
|
headers: this.headers,
|
|
ok: this.ok,
|
|
redirected: this.redirected
|
|
});
|
|
}
|
|
}
|
|
|
|
Body.mixIn(Response.prototype);
|
|
|
|
Object.defineProperties(Response.prototype, {
|
|
url: { enumerable: true },
|
|
status: { enumerable: true },
|
|
ok: { enumerable: true },
|
|
redirected: { enumerable: true },
|
|
statusText: { enumerable: true },
|
|
headers: { enumerable: true },
|
|
clone: { enumerable: true }
|
|
});
|
|
|
|
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
|
|
value: 'Response',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
const INTERNALS$2 = Symbol('Request internals');
|
|
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;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7952:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
|
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
|
|
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
|
|
|
|
const testParameter = (name, filters) => {
|
|
return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
|
|
};
|
|
|
|
const normalizeDataURL = (urlString, {stripHash}) => {
|
|
const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
|
|
|
|
if (!match) {
|
|
throw new Error(`Invalid URL: ${urlString}`);
|
|
}
|
|
|
|
let {type, data, hash} = match.groups;
|
|
const mediaType = type.split(';');
|
|
hash = stripHash ? '' : hash;
|
|
|
|
let isBase64 = false;
|
|
if (mediaType[mediaType.length - 1] === 'base64') {
|
|
mediaType.pop();
|
|
isBase64 = true;
|
|
}
|
|
|
|
// Lowercase MIME type
|
|
const mimeType = (mediaType.shift() || '').toLowerCase();
|
|
const attributes = mediaType
|
|
.map(attribute => {
|
|
let [key, value = ''] = attribute.split('=').map(string => string.trim());
|
|
|
|
// Lowercase `charset`
|
|
if (key === 'charset') {
|
|
value = value.toLowerCase();
|
|
|
|
if (value === DATA_URL_DEFAULT_CHARSET) {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
return `${key}${value ? `=${value}` : ''}`;
|
|
})
|
|
.filter(Boolean);
|
|
|
|
const normalizedMediaType = [
|
|
...attributes
|
|
];
|
|
|
|
if (isBase64) {
|
|
normalizedMediaType.push('base64');
|
|
}
|
|
|
|
if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
|
|
normalizedMediaType.unshift(mimeType);
|
|
}
|
|
|
|
return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
|
|
};
|
|
|
|
const normalizeUrl = (urlString, options) => {
|
|
options = {
|
|
defaultProtocol: 'http:',
|
|
normalizeProtocol: true,
|
|
forceHttp: false,
|
|
forceHttps: false,
|
|
stripAuthentication: true,
|
|
stripHash: false,
|
|
stripTextFragment: true,
|
|
stripWWW: true,
|
|
removeQueryParameters: [/^utm_\w+/i],
|
|
removeTrailingSlash: true,
|
|
removeSingleSlash: true,
|
|
removeDirectoryIndex: false,
|
|
sortQueryParameters: true,
|
|
...options
|
|
};
|
|
|
|
urlString = urlString.trim();
|
|
|
|
// Data URL
|
|
if (/^data:/i.test(urlString)) {
|
|
return normalizeDataURL(urlString, options);
|
|
}
|
|
|
|
if (/^view-source:/i.test(urlString)) {
|
|
throw new Error('`view-source:` is not supported as it is a non-standard protocol');
|
|
}
|
|
|
|
const hasRelativeProtocol = urlString.startsWith('//');
|
|
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
|
|
|
// Prepend protocol
|
|
if (!isRelativeUrl) {
|
|
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
|
|
}
|
|
|
|
const urlObj = new URL(urlString);
|
|
|
|
if (options.forceHttp && options.forceHttps) {
|
|
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
|
|
}
|
|
|
|
if (options.forceHttp && urlObj.protocol === 'https:') {
|
|
urlObj.protocol = 'http:';
|
|
}
|
|
|
|
if (options.forceHttps && urlObj.protocol === 'http:') {
|
|
urlObj.protocol = 'https:';
|
|
}
|
|
|
|
// Remove auth
|
|
if (options.stripAuthentication) {
|
|
urlObj.username = '';
|
|
urlObj.password = '';
|
|
}
|
|
|
|
// Remove hash
|
|
if (options.stripHash) {
|
|
urlObj.hash = '';
|
|
} else if (options.stripTextFragment) {
|
|
urlObj.hash = urlObj.hash.replace(/#?:~:text.*?$/i, '');
|
|
}
|
|
|
|
// Remove duplicate slashes if not preceded by a protocol
|
|
if (urlObj.pathname) {
|
|
urlObj.pathname = urlObj.pathname.replace(/(?<!\b(?:[a-z][a-z\d+\-.]{1,50}:))\/{2,}/g, '/');
|
|
}
|
|
|
|
// Decode URI octets
|
|
if (urlObj.pathname) {
|
|
try {
|
|
urlObj.pathname = decodeURI(urlObj.pathname);
|
|
} catch (_) {}
|
|
}
|
|
|
|
// Remove directory index
|
|
if (options.removeDirectoryIndex === true) {
|
|
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
|
}
|
|
|
|
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
|
|
let pathComponents = urlObj.pathname.split('/');
|
|
const lastComponent = pathComponents[pathComponents.length - 1];
|
|
|
|
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
|
pathComponents = pathComponents.slice(0, pathComponents.length - 1);
|
|
urlObj.pathname = pathComponents.slice(1).join('/') + '/';
|
|
}
|
|
}
|
|
|
|
if (urlObj.hostname) {
|
|
// Remove trailing dot
|
|
urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
|
|
|
|
// Remove `www.`
|
|
if (options.stripWWW && /^www\.(?!www\.)(?:[a-z\-\d]{1,63})\.(?:[a-z.\-\d]{2,63})$/.test(urlObj.hostname)) {
|
|
// Each label should be max 63 at length (min: 1).
|
|
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
|
// Each TLD should be up to 63 characters long (min: 2).
|
|
// It is technically possible to have a single character TLD, but none currently exist.
|
|
urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
|
|
}
|
|
}
|
|
|
|
// Remove query unwanted parameters
|
|
if (Array.isArray(options.removeQueryParameters)) {
|
|
for (const key of [...urlObj.searchParams.keys()]) {
|
|
if (testParameter(key, options.removeQueryParameters)) {
|
|
urlObj.searchParams.delete(key);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (options.removeQueryParameters === true) {
|
|
urlObj.search = '';
|
|
}
|
|
|
|
// Sort query parameters
|
|
if (options.sortQueryParameters) {
|
|
urlObj.searchParams.sort();
|
|
}
|
|
|
|
if (options.removeTrailingSlash) {
|
|
urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
|
|
}
|
|
|
|
const oldUrlString = urlString;
|
|
|
|
// Take advantage of many of the Node `url` normalizations
|
|
urlString = urlObj.toString();
|
|
|
|
if (!options.removeSingleSlash && urlObj.pathname === '/' && !oldUrlString.endsWith('/') && urlObj.hash === '') {
|
|
urlString = urlString.replace(/\/$/, '');
|
|
}
|
|
|
|
// Remove ending `/` unless removeSingleSlash is false
|
|
if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '' && options.removeSingleSlash) {
|
|
urlString = urlString.replace(/\/$/, '');
|
|
}
|
|
|
|
// Restore relative protocol, if applicable
|
|
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
|
urlString = urlString.replace(/^http:\/\//, '//');
|
|
}
|
|
|
|
// Remove http/https
|
|
if (options.stripProtocol) {
|
|
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
|
|
}
|
|
|
|
return urlString;
|
|
};
|
|
|
|
module.exports = normalizeUrl;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1223:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var wrappy = __nccwpck_require__(2940)
|
|
module.exports = wrappy(once)
|
|
module.exports.strict = wrappy(onceStrict)
|
|
|
|
once.proto = once(function () {
|
|
Object.defineProperty(Function.prototype, 'once', {
|
|
value: function () {
|
|
return once(this)
|
|
},
|
|
configurable: true
|
|
})
|
|
|
|
Object.defineProperty(Function.prototype, 'onceStrict', {
|
|
value: function () {
|
|
return onceStrict(this)
|
|
},
|
|
configurable: true
|
|
})
|
|
})
|
|
|
|
function once (fn) {
|
|
var f = function () {
|
|
if (f.called) return f.value
|
|
f.called = true
|
|
return f.value = fn.apply(this, arguments)
|
|
}
|
|
f.called = false
|
|
return f
|
|
}
|
|
|
|
function onceStrict (fn) {
|
|
var f = function () {
|
|
if (f.called)
|
|
throw new Error(f.onceError)
|
|
f.called = true
|
|
return f.value = fn.apply(this, arguments)
|
|
}
|
|
var name = fn.name || 'Function wrapped with `once`'
|
|
f.onceError = name + " shouldn't be called more than once"
|
|
f.called = false
|
|
return f
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8569:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = __nccwpck_require__(3322);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6099:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const path = __nccwpck_require__(1017);
|
|
const WIN_SLASH = '\\\\/';
|
|
const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
|
|
|
|
/**
|
|
* Posix glob regex
|
|
*/
|
|
|
|
const DOT_LITERAL = '\\.';
|
|
const PLUS_LITERAL = '\\+';
|
|
const QMARK_LITERAL = '\\?';
|
|
const SLASH_LITERAL = '\\/';
|
|
const ONE_CHAR = '(?=.)';
|
|
const QMARK = '[^/]';
|
|
const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
|
|
const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
|
|
const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
|
|
const NO_DOT = `(?!${DOT_LITERAL})`;
|
|
const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
|
|
const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
|
|
const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
|
|
const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
|
|
const STAR = `${QMARK}*?`;
|
|
|
|
const POSIX_CHARS = {
|
|
DOT_LITERAL,
|
|
PLUS_LITERAL,
|
|
QMARK_LITERAL,
|
|
SLASH_LITERAL,
|
|
ONE_CHAR,
|
|
QMARK,
|
|
END_ANCHOR,
|
|
DOTS_SLASH,
|
|
NO_DOT,
|
|
NO_DOTS,
|
|
NO_DOT_SLASH,
|
|
NO_DOTS_SLASH,
|
|
QMARK_NO_DOT,
|
|
STAR,
|
|
START_ANCHOR
|
|
};
|
|
|
|
/**
|
|
* Windows glob regex
|
|
*/
|
|
|
|
const WINDOWS_CHARS = {
|
|
...POSIX_CHARS,
|
|
|
|
SLASH_LITERAL: `[${WIN_SLASH}]`,
|
|
QMARK: WIN_NO_SLASH,
|
|
STAR: `${WIN_NO_SLASH}*?`,
|
|
DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
|
|
NO_DOT: `(?!${DOT_LITERAL})`,
|
|
NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
|
|
NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
|
|
NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
|
|
QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
|
|
START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
|
|
END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
|
|
};
|
|
|
|
/**
|
|
* POSIX Bracket Regex
|
|
*/
|
|
|
|
const POSIX_REGEX_SOURCE = {
|
|
alnum: 'a-zA-Z0-9',
|
|
alpha: 'a-zA-Z',
|
|
ascii: '\\x00-\\x7F',
|
|
blank: ' \\t',
|
|
cntrl: '\\x00-\\x1F\\x7F',
|
|
digit: '0-9',
|
|
graph: '\\x21-\\x7E',
|
|
lower: 'a-z',
|
|
print: '\\x20-\\x7E ',
|
|
punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
|
|
space: ' \\t\\r\\n\\v\\f',
|
|
upper: 'A-Z',
|
|
word: 'A-Za-z0-9_',
|
|
xdigit: 'A-Fa-f0-9'
|
|
};
|
|
|
|
module.exports = {
|
|
MAX_LENGTH: 1024 * 64,
|
|
POSIX_REGEX_SOURCE,
|
|
|
|
// regular expressions
|
|
REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
|
|
REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
|
|
REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
|
|
REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
|
|
REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
|
|
REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
|
|
|
|
// Replace globs with equivalent patterns to reduce parsing time.
|
|
REPLACEMENTS: {
|
|
'***': '*',
|
|
'**/**': '**',
|
|
'**/**/**': '**'
|
|
},
|
|
|
|
// Digits
|
|
CHAR_0: 48, /* 0 */
|
|
CHAR_9: 57, /* 9 */
|
|
|
|
// Alphabet chars.
|
|
CHAR_UPPERCASE_A: 65, /* A */
|
|
CHAR_LOWERCASE_A: 97, /* a */
|
|
CHAR_UPPERCASE_Z: 90, /* Z */
|
|
CHAR_LOWERCASE_Z: 122, /* z */
|
|
|
|
CHAR_LEFT_PARENTHESES: 40, /* ( */
|
|
CHAR_RIGHT_PARENTHESES: 41, /* ) */
|
|
|
|
CHAR_ASTERISK: 42, /* * */
|
|
|
|
// Non-alphabetic chars.
|
|
CHAR_AMPERSAND: 38, /* & */
|
|
CHAR_AT: 64, /* @ */
|
|
CHAR_BACKWARD_SLASH: 92, /* \ */
|
|
CHAR_CARRIAGE_RETURN: 13, /* \r */
|
|
CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
|
|
CHAR_COLON: 58, /* : */
|
|
CHAR_COMMA: 44, /* , */
|
|
CHAR_DOT: 46, /* . */
|
|
CHAR_DOUBLE_QUOTE: 34, /* " */
|
|
CHAR_EQUAL: 61, /* = */
|
|
CHAR_EXCLAMATION_MARK: 33, /* ! */
|
|
CHAR_FORM_FEED: 12, /* \f */
|
|
CHAR_FORWARD_SLASH: 47, /* / */
|
|
CHAR_GRAVE_ACCENT: 96, /* ` */
|
|
CHAR_HASH: 35, /* # */
|
|
CHAR_HYPHEN_MINUS: 45, /* - */
|
|
CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
|
|
CHAR_LEFT_CURLY_BRACE: 123, /* { */
|
|
CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
|
|
CHAR_LINE_FEED: 10, /* \n */
|
|
CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
|
|
CHAR_PERCENT: 37, /* % */
|
|
CHAR_PLUS: 43, /* + */
|
|
CHAR_QUESTION_MARK: 63, /* ? */
|
|
CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
|
|
CHAR_RIGHT_CURLY_BRACE: 125, /* } */
|
|
CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
|
|
CHAR_SEMICOLON: 59, /* ; */
|
|
CHAR_SINGLE_QUOTE: 39, /* ' */
|
|
CHAR_SPACE: 32, /* */
|
|
CHAR_TAB: 9, /* \t */
|
|
CHAR_UNDERSCORE: 95, /* _ */
|
|
CHAR_VERTICAL_LINE: 124, /* | */
|
|
CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
|
|
|
|
SEP: path.sep,
|
|
|
|
/**
|
|
* Create EXTGLOB_CHARS
|
|
*/
|
|
|
|
extglobChars(chars) {
|
|
return {
|
|
'!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
|
|
'?': { type: 'qmark', open: '(?:', close: ')?' },
|
|
'+': { type: 'plus', open: '(?:', close: ')+' },
|
|
'*': { type: 'star', open: '(?:', close: ')*' },
|
|
'@': { type: 'at', open: '(?:', close: ')' }
|
|
};
|
|
},
|
|
|
|
/**
|
|
* Create GLOB_CHARS
|
|
*/
|
|
|
|
globChars(win32) {
|
|
return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2139:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const constants = __nccwpck_require__(6099);
|
|
const utils = __nccwpck_require__(479);
|
|
|
|
/**
|
|
* Constants
|
|
*/
|
|
|
|
const {
|
|
MAX_LENGTH,
|
|
POSIX_REGEX_SOURCE,
|
|
REGEX_NON_SPECIAL_CHARS,
|
|
REGEX_SPECIAL_CHARS_BACKREF,
|
|
REPLACEMENTS
|
|
} = constants;
|
|
|
|
/**
|
|
* Helpers
|
|
*/
|
|
|
|
const expandRange = (args, options) => {
|
|
if (typeof options.expandRange === 'function') {
|
|
return options.expandRange(...args, options);
|
|
}
|
|
|
|
args.sort();
|
|
const value = `[${args.join('-')}]`;
|
|
|
|
try {
|
|
/* eslint-disable-next-line no-new */
|
|
new RegExp(value);
|
|
} catch (ex) {
|
|
return args.map(v => utils.escapeRegex(v)).join('..');
|
|
}
|
|
|
|
return value;
|
|
};
|
|
|
|
/**
|
|
* Create the message for a syntax error
|
|
*/
|
|
|
|
const syntaxError = (type, char) => {
|
|
return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
|
|
};
|
|
|
|
/**
|
|
* Parse the given input string.
|
|
* @param {String} input
|
|
* @param {Object} options
|
|
* @return {Object}
|
|
*/
|
|
|
|
const parse = (input, options) => {
|
|
if (typeof input !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
input = REPLACEMENTS[input] || input;
|
|
|
|
const opts = { ...options };
|
|
const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
|
|
|
|
let len = input.length;
|
|
if (len > max) {
|
|
throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
|
|
}
|
|
|
|
const bos = { type: 'bos', value: '', output: opts.prepend || '' };
|
|
const tokens = [bos];
|
|
|
|
const capture = opts.capture ? '' : '?:';
|
|
const win32 = utils.isWindows(options);
|
|
|
|
// create constants based on platform, for windows or posix
|
|
const PLATFORM_CHARS = constants.globChars(win32);
|
|
const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
|
|
|
|
const {
|
|
DOT_LITERAL,
|
|
PLUS_LITERAL,
|
|
SLASH_LITERAL,
|
|
ONE_CHAR,
|
|
DOTS_SLASH,
|
|
NO_DOT,
|
|
NO_DOT_SLASH,
|
|
NO_DOTS_SLASH,
|
|
QMARK,
|
|
QMARK_NO_DOT,
|
|
STAR,
|
|
START_ANCHOR
|
|
} = PLATFORM_CHARS;
|
|
|
|
const globstar = opts => {
|
|
return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
|
|
};
|
|
|
|
const nodot = opts.dot ? '' : NO_DOT;
|
|
const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
|
|
let star = opts.bash === true ? globstar(opts) : STAR;
|
|
|
|
if (opts.capture) {
|
|
star = `(${star})`;
|
|
}
|
|
|
|
// minimatch options support
|
|
if (typeof opts.noext === 'boolean') {
|
|
opts.noextglob = opts.noext;
|
|
}
|
|
|
|
const state = {
|
|
input,
|
|
index: -1,
|
|
start: 0,
|
|
dot: opts.dot === true,
|
|
consumed: '',
|
|
output: '',
|
|
prefix: '',
|
|
backtrack: false,
|
|
negated: false,
|
|
brackets: 0,
|
|
braces: 0,
|
|
parens: 0,
|
|
quotes: 0,
|
|
globstar: false,
|
|
tokens
|
|
};
|
|
|
|
input = utils.removePrefix(input, state);
|
|
len = input.length;
|
|
|
|
const extglobs = [];
|
|
const braces = [];
|
|
const stack = [];
|
|
let prev = bos;
|
|
let value;
|
|
|
|
/**
|
|
* Tokenizing helpers
|
|
*/
|
|
|
|
const eos = () => state.index === len - 1;
|
|
const peek = state.peek = (n = 1) => input[state.index + n];
|
|
const advance = state.advance = () => input[++state.index] || '';
|
|
const remaining = () => input.slice(state.index + 1);
|
|
const consume = (value = '', num = 0) => {
|
|
state.consumed += value;
|
|
state.index += num;
|
|
};
|
|
|
|
const append = token => {
|
|
state.output += token.output != null ? token.output : token.value;
|
|
consume(token.value);
|
|
};
|
|
|
|
const negate = () => {
|
|
let count = 1;
|
|
|
|
while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
|
|
advance();
|
|
state.start++;
|
|
count++;
|
|
}
|
|
|
|
if (count % 2 === 0) {
|
|
return false;
|
|
}
|
|
|
|
state.negated = true;
|
|
state.start++;
|
|
return true;
|
|
};
|
|
|
|
const increment = type => {
|
|
state[type]++;
|
|
stack.push(type);
|
|
};
|
|
|
|
const decrement = type => {
|
|
state[type]--;
|
|
stack.pop();
|
|
};
|
|
|
|
/**
|
|
* Push tokens onto the tokens array. This helper speeds up
|
|
* tokenizing by 1) helping us avoid backtracking as much as possible,
|
|
* and 2) helping us avoid creating extra tokens when consecutive
|
|
* characters are plain text. This improves performance and simplifies
|
|
* lookbehinds.
|
|
*/
|
|
|
|
const push = tok => {
|
|
if (prev.type === 'globstar') {
|
|
const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
|
|
const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
|
|
|
|
if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
|
|
state.output = state.output.slice(0, -prev.output.length);
|
|
prev.type = 'star';
|
|
prev.value = '*';
|
|
prev.output = star;
|
|
state.output += prev.output;
|
|
}
|
|
}
|
|
|
|
if (extglobs.length && tok.type !== 'paren') {
|
|
extglobs[extglobs.length - 1].inner += tok.value;
|
|
}
|
|
|
|
if (tok.value || tok.output) append(tok);
|
|
if (prev && prev.type === 'text' && tok.type === 'text') {
|
|
prev.value += tok.value;
|
|
prev.output = (prev.output || '') + tok.value;
|
|
return;
|
|
}
|
|
|
|
tok.prev = prev;
|
|
tokens.push(tok);
|
|
prev = tok;
|
|
};
|
|
|
|
const extglobOpen = (type, value) => {
|
|
const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
|
|
|
|
token.prev = prev;
|
|
token.parens = state.parens;
|
|
token.output = state.output;
|
|
const output = (opts.capture ? '(' : '') + token.open;
|
|
|
|
increment('parens');
|
|
push({ type, value, output: state.output ? '' : ONE_CHAR });
|
|
push({ type: 'paren', extglob: true, value: advance(), output });
|
|
extglobs.push(token);
|
|
};
|
|
|
|
const extglobClose = token => {
|
|
let output = token.close + (opts.capture ? ')' : '');
|
|
let rest;
|
|
|
|
if (token.type === 'negate') {
|
|
let extglobStar = star;
|
|
|
|
if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
|
|
extglobStar = globstar(opts);
|
|
}
|
|
|
|
if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
|
|
output = token.close = `)$))${extglobStar}`;
|
|
}
|
|
|
|
if (token.inner.includes('*') && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) {
|
|
// Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.
|
|
// In this case, we need to parse the string and use it in the output of the original pattern.
|
|
// Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.
|
|
//
|
|
// Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.
|
|
const expression = parse(rest, { ...options, fastpaths: false }).output;
|
|
|
|
output = token.close = `)${expression})${extglobStar})`;
|
|
}
|
|
|
|
if (token.prev.type === 'bos') {
|
|
state.negatedExtglob = true;
|
|
}
|
|
}
|
|
|
|
push({ type: 'paren', extglob: true, value, output });
|
|
decrement('parens');
|
|
};
|
|
|
|
/**
|
|
* Fast paths
|
|
*/
|
|
|
|
if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
|
|
let backslashes = false;
|
|
|
|
let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
|
|
if (first === '\\') {
|
|
backslashes = true;
|
|
return m;
|
|
}
|
|
|
|
if (first === '?') {
|
|
if (esc) {
|
|
return esc + first + (rest ? QMARK.repeat(rest.length) : '');
|
|
}
|
|
if (index === 0) {
|
|
return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
|
|
}
|
|
return QMARK.repeat(chars.length);
|
|
}
|
|
|
|
if (first === '.') {
|
|
return DOT_LITERAL.repeat(chars.length);
|
|
}
|
|
|
|
if (first === '*') {
|
|
if (esc) {
|
|
return esc + first + (rest ? star : '');
|
|
}
|
|
return star;
|
|
}
|
|
return esc ? m : `\\${m}`;
|
|
});
|
|
|
|
if (backslashes === true) {
|
|
if (opts.unescape === true) {
|
|
output = output.replace(/\\/g, '');
|
|
} else {
|
|
output = output.replace(/\\+/g, m => {
|
|
return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
|
|
});
|
|
}
|
|
}
|
|
|
|
if (output === input && opts.contains === true) {
|
|
state.output = input;
|
|
return state;
|
|
}
|
|
|
|
state.output = utils.wrapOutput(output, state, options);
|
|
return state;
|
|
}
|
|
|
|
/**
|
|
* Tokenize input until we reach end-of-string
|
|
*/
|
|
|
|
while (!eos()) {
|
|
value = advance();
|
|
|
|
if (value === '\u0000') {
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Escaped characters
|
|
*/
|
|
|
|
if (value === '\\') {
|
|
const next = peek();
|
|
|
|
if (next === '/' && opts.bash !== true) {
|
|
continue;
|
|
}
|
|
|
|
if (next === '.' || next === ';') {
|
|
continue;
|
|
}
|
|
|
|
if (!next) {
|
|
value += '\\';
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
// collapse slashes to reduce potential for exploits
|
|
const match = /^\\+/.exec(remaining());
|
|
let slashes = 0;
|
|
|
|
if (match && match[0].length > 2) {
|
|
slashes = match[0].length;
|
|
state.index += slashes;
|
|
if (slashes % 2 !== 0) {
|
|
value += '\\';
|
|
}
|
|
}
|
|
|
|
if (opts.unescape === true) {
|
|
value = advance();
|
|
} else {
|
|
value += advance();
|
|
}
|
|
|
|
if (state.brackets === 0) {
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* If we're inside a regex character class, continue
|
|
* until we reach the closing bracket.
|
|
*/
|
|
|
|
if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
|
|
if (opts.posix !== false && value === ':') {
|
|
const inner = prev.value.slice(1);
|
|
if (inner.includes('[')) {
|
|
prev.posix = true;
|
|
|
|
if (inner.includes(':')) {
|
|
const idx = prev.value.lastIndexOf('[');
|
|
const pre = prev.value.slice(0, idx);
|
|
const rest = prev.value.slice(idx + 2);
|
|
const posix = POSIX_REGEX_SOURCE[rest];
|
|
if (posix) {
|
|
prev.value = pre + posix;
|
|
state.backtrack = true;
|
|
advance();
|
|
|
|
if (!bos.output && tokens.indexOf(prev) === 1) {
|
|
bos.output = ONE_CHAR;
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
|
|
value = `\\${value}`;
|
|
}
|
|
|
|
if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
|
|
value = `\\${value}`;
|
|
}
|
|
|
|
if (opts.posix === true && value === '!' && prev.value === '[') {
|
|
value = '^';
|
|
}
|
|
|
|
prev.value += value;
|
|
append({ value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* If we're inside a quoted string, continue
|
|
* until we reach the closing double quote.
|
|
*/
|
|
|
|
if (state.quotes === 1 && value !== '"') {
|
|
value = utils.escapeRegex(value);
|
|
prev.value += value;
|
|
append({ value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Double quotes
|
|
*/
|
|
|
|
if (value === '"') {
|
|
state.quotes = state.quotes === 1 ? 0 : 1;
|
|
if (opts.keepQuotes === true) {
|
|
push({ type: 'text', value });
|
|
}
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Parentheses
|
|
*/
|
|
|
|
if (value === '(') {
|
|
increment('parens');
|
|
push({ type: 'paren', value });
|
|
continue;
|
|
}
|
|
|
|
if (value === ')') {
|
|
if (state.parens === 0 && opts.strictBrackets === true) {
|
|
throw new SyntaxError(syntaxError('opening', '('));
|
|
}
|
|
|
|
const extglob = extglobs[extglobs.length - 1];
|
|
if (extglob && state.parens === extglob.parens + 1) {
|
|
extglobClose(extglobs.pop());
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
|
|
decrement('parens');
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Square brackets
|
|
*/
|
|
|
|
if (value === '[') {
|
|
if (opts.nobracket === true || !remaining().includes(']')) {
|
|
if (opts.nobracket !== true && opts.strictBrackets === true) {
|
|
throw new SyntaxError(syntaxError('closing', ']'));
|
|
}
|
|
|
|
value = `\\${value}`;
|
|
} else {
|
|
increment('brackets');
|
|
}
|
|
|
|
push({ type: 'bracket', value });
|
|
continue;
|
|
}
|
|
|
|
if (value === ']') {
|
|
if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
|
|
push({ type: 'text', value, output: `\\${value}` });
|
|
continue;
|
|
}
|
|
|
|
if (state.brackets === 0) {
|
|
if (opts.strictBrackets === true) {
|
|
throw new SyntaxError(syntaxError('opening', '['));
|
|
}
|
|
|
|
push({ type: 'text', value, output: `\\${value}` });
|
|
continue;
|
|
}
|
|
|
|
decrement('brackets');
|
|
|
|
const prevValue = prev.value.slice(1);
|
|
if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
|
|
value = `/${value}`;
|
|
}
|
|
|
|
prev.value += value;
|
|
append({ value });
|
|
|
|
// when literal brackets are explicitly disabled
|
|
// assume we should match with a regex character class
|
|
if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
|
|
continue;
|
|
}
|
|
|
|
const escaped = utils.escapeRegex(prev.value);
|
|
state.output = state.output.slice(0, -prev.value.length);
|
|
|
|
// when literal brackets are explicitly enabled
|
|
// assume we should escape the brackets to match literal characters
|
|
if (opts.literalBrackets === true) {
|
|
state.output += escaped;
|
|
prev.value = escaped;
|
|
continue;
|
|
}
|
|
|
|
// when the user specifies nothing, try to match both
|
|
prev.value = `(${capture}${escaped}|${prev.value})`;
|
|
state.output += prev.value;
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Braces
|
|
*/
|
|
|
|
if (value === '{' && opts.nobrace !== true) {
|
|
increment('braces');
|
|
|
|
const open = {
|
|
type: 'brace',
|
|
value,
|
|
output: '(',
|
|
outputIndex: state.output.length,
|
|
tokensIndex: state.tokens.length
|
|
};
|
|
|
|
braces.push(open);
|
|
push(open);
|
|
continue;
|
|
}
|
|
|
|
if (value === '}') {
|
|
const brace = braces[braces.length - 1];
|
|
|
|
if (opts.nobrace === true || !brace) {
|
|
push({ type: 'text', value, output: value });
|
|
continue;
|
|
}
|
|
|
|
let output = ')';
|
|
|
|
if (brace.dots === true) {
|
|
const arr = tokens.slice();
|
|
const range = [];
|
|
|
|
for (let i = arr.length - 1; i >= 0; i--) {
|
|
tokens.pop();
|
|
if (arr[i].type === 'brace') {
|
|
break;
|
|
}
|
|
if (arr[i].type !== 'dots') {
|
|
range.unshift(arr[i].value);
|
|
}
|
|
}
|
|
|
|
output = expandRange(range, opts);
|
|
state.backtrack = true;
|
|
}
|
|
|
|
if (brace.comma !== true && brace.dots !== true) {
|
|
const out = state.output.slice(0, brace.outputIndex);
|
|
const toks = state.tokens.slice(brace.tokensIndex);
|
|
brace.value = brace.output = '\\{';
|
|
value = output = '\\}';
|
|
state.output = out;
|
|
for (const t of toks) {
|
|
state.output += (t.output || t.value);
|
|
}
|
|
}
|
|
|
|
push({ type: 'brace', value, output });
|
|
decrement('braces');
|
|
braces.pop();
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Pipes
|
|
*/
|
|
|
|
if (value === '|') {
|
|
if (extglobs.length > 0) {
|
|
extglobs[extglobs.length - 1].conditions++;
|
|
}
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Commas
|
|
*/
|
|
|
|
if (value === ',') {
|
|
let output = value;
|
|
|
|
const brace = braces[braces.length - 1];
|
|
if (brace && stack[stack.length - 1] === 'braces') {
|
|
brace.comma = true;
|
|
output = '|';
|
|
}
|
|
|
|
push({ type: 'comma', value, output });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Slashes
|
|
*/
|
|
|
|
if (value === '/') {
|
|
// if the beginning of the glob is "./", advance the start
|
|
// to the current index, and don't add the "./" characters
|
|
// to the state. This greatly simplifies lookbehinds when
|
|
// checking for BOS characters like "!" and "." (not "./")
|
|
if (prev.type === 'dot' && state.index === state.start + 1) {
|
|
state.start = state.index + 1;
|
|
state.consumed = '';
|
|
state.output = '';
|
|
tokens.pop();
|
|
prev = bos; // reset "prev" to the first token
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'slash', value, output: SLASH_LITERAL });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Dots
|
|
*/
|
|
|
|
if (value === '.') {
|
|
if (state.braces > 0 && prev.type === 'dot') {
|
|
if (prev.value === '.') prev.output = DOT_LITERAL;
|
|
const brace = braces[braces.length - 1];
|
|
prev.type = 'dots';
|
|
prev.output += value;
|
|
prev.value += value;
|
|
brace.dots = true;
|
|
continue;
|
|
}
|
|
|
|
if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
|
|
push({ type: 'text', value, output: DOT_LITERAL });
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'dot', value, output: DOT_LITERAL });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Question marks
|
|
*/
|
|
|
|
if (value === '?') {
|
|
const isGroup = prev && prev.value === '(';
|
|
if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
|
|
extglobOpen('qmark', value);
|
|
continue;
|
|
}
|
|
|
|
if (prev && prev.type === 'paren') {
|
|
const next = peek();
|
|
let output = value;
|
|
|
|
if (next === '<' && !utils.supportsLookbehinds()) {
|
|
throw new Error('Node.js v10 or higher is required for regex lookbehinds');
|
|
}
|
|
|
|
if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
|
|
output = `\\${value}`;
|
|
}
|
|
|
|
push({ type: 'text', value, output });
|
|
continue;
|
|
}
|
|
|
|
if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
|
|
push({ type: 'qmark', value, output: QMARK_NO_DOT });
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'qmark', value, output: QMARK });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Exclamation
|
|
*/
|
|
|
|
if (value === '!') {
|
|
if (opts.noextglob !== true && peek() === '(') {
|
|
if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
|
|
extglobOpen('negate', value);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (opts.nonegate !== true && state.index === 0) {
|
|
negate();
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Plus
|
|
*/
|
|
|
|
if (value === '+') {
|
|
if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
|
|
extglobOpen('plus', value);
|
|
continue;
|
|
}
|
|
|
|
if ((prev && prev.value === '(') || opts.regex === false) {
|
|
push({ type: 'plus', value, output: PLUS_LITERAL });
|
|
continue;
|
|
}
|
|
|
|
if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
|
|
push({ type: 'plus', value });
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'plus', value: PLUS_LITERAL });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Plain text
|
|
*/
|
|
|
|
if (value === '@') {
|
|
if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
|
|
push({ type: 'at', extglob: true, value, output: '' });
|
|
continue;
|
|
}
|
|
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Plain text
|
|
*/
|
|
|
|
if (value !== '*') {
|
|
if (value === '$' || value === '^') {
|
|
value = `\\${value}`;
|
|
}
|
|
|
|
const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
|
|
if (match) {
|
|
value += match[0];
|
|
state.index += match[0].length;
|
|
}
|
|
|
|
push({ type: 'text', value });
|
|
continue;
|
|
}
|
|
|
|
/**
|
|
* Stars
|
|
*/
|
|
|
|
if (prev && (prev.type === 'globstar' || prev.star === true)) {
|
|
prev.type = 'star';
|
|
prev.star = true;
|
|
prev.value += value;
|
|
prev.output = star;
|
|
state.backtrack = true;
|
|
state.globstar = true;
|
|
consume(value);
|
|
continue;
|
|
}
|
|
|
|
let rest = remaining();
|
|
if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
|
|
extglobOpen('star', value);
|
|
continue;
|
|
}
|
|
|
|
if (prev.type === 'star') {
|
|
if (opts.noglobstar === true) {
|
|
consume(value);
|
|
continue;
|
|
}
|
|
|
|
const prior = prev.prev;
|
|
const before = prior.prev;
|
|
const isStart = prior.type === 'slash' || prior.type === 'bos';
|
|
const afterStar = before && (before.type === 'star' || before.type === 'globstar');
|
|
|
|
if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
|
|
push({ type: 'star', value, output: '' });
|
|
continue;
|
|
}
|
|
|
|
const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
|
|
const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
|
|
if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
|
|
push({ type: 'star', value, output: '' });
|
|
continue;
|
|
}
|
|
|
|
// strip consecutive `/**/`
|
|
while (rest.slice(0, 3) === '/**') {
|
|
const after = input[state.index + 4];
|
|
if (after && after !== '/') {
|
|
break;
|
|
}
|
|
rest = rest.slice(3);
|
|
consume('/**', 3);
|
|
}
|
|
|
|
if (prior.type === 'bos' && eos()) {
|
|
prev.type = 'globstar';
|
|
prev.value += value;
|
|
prev.output = globstar(opts);
|
|
state.output = prev.output;
|
|
state.globstar = true;
|
|
consume(value);
|
|
continue;
|
|
}
|
|
|
|
if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
|
|
state.output = state.output.slice(0, -(prior.output + prev.output).length);
|
|
prior.output = `(?:${prior.output}`;
|
|
|
|
prev.type = 'globstar';
|
|
prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
|
|
prev.value += value;
|
|
state.globstar = true;
|
|
state.output += prior.output + prev.output;
|
|
consume(value);
|
|
continue;
|
|
}
|
|
|
|
if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
|
|
const end = rest[1] !== void 0 ? '|$' : '';
|
|
|
|
state.output = state.output.slice(0, -(prior.output + prev.output).length);
|
|
prior.output = `(?:${prior.output}`;
|
|
|
|
prev.type = 'globstar';
|
|
prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
|
|
prev.value += value;
|
|
|
|
state.output += prior.output + prev.output;
|
|
state.globstar = true;
|
|
|
|
consume(value + advance());
|
|
|
|
push({ type: 'slash', value: '/', output: '' });
|
|
continue;
|
|
}
|
|
|
|
if (prior.type === 'bos' && rest[0] === '/') {
|
|
prev.type = 'globstar';
|
|
prev.value += value;
|
|
prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
|
|
state.output = prev.output;
|
|
state.globstar = true;
|
|
consume(value + advance());
|
|
push({ type: 'slash', value: '/', output: '' });
|
|
continue;
|
|
}
|
|
|
|
// remove single star from output
|
|
state.output = state.output.slice(0, -prev.output.length);
|
|
|
|
// reset previous token to globstar
|
|
prev.type = 'globstar';
|
|
prev.output = globstar(opts);
|
|
prev.value += value;
|
|
|
|
// reset output with globstar
|
|
state.output += prev.output;
|
|
state.globstar = true;
|
|
consume(value);
|
|
continue;
|
|
}
|
|
|
|
const token = { type: 'star', value, output: star };
|
|
|
|
if (opts.bash === true) {
|
|
token.output = '.*?';
|
|
if (prev.type === 'bos' || prev.type === 'slash') {
|
|
token.output = nodot + token.output;
|
|
}
|
|
push(token);
|
|
continue;
|
|
}
|
|
|
|
if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
|
|
token.output = value;
|
|
push(token);
|
|
continue;
|
|
}
|
|
|
|
if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
|
|
if (prev.type === 'dot') {
|
|
state.output += NO_DOT_SLASH;
|
|
prev.output += NO_DOT_SLASH;
|
|
|
|
} else if (opts.dot === true) {
|
|
state.output += NO_DOTS_SLASH;
|
|
prev.output += NO_DOTS_SLASH;
|
|
|
|
} else {
|
|
state.output += nodot;
|
|
prev.output += nodot;
|
|
}
|
|
|
|
if (peek() !== '*') {
|
|
state.output += ONE_CHAR;
|
|
prev.output += ONE_CHAR;
|
|
}
|
|
}
|
|
|
|
push(token);
|
|
}
|
|
|
|
while (state.brackets > 0) {
|
|
if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
|
|
state.output = utils.escapeLast(state.output, '[');
|
|
decrement('brackets');
|
|
}
|
|
|
|
while (state.parens > 0) {
|
|
if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
|
|
state.output = utils.escapeLast(state.output, '(');
|
|
decrement('parens');
|
|
}
|
|
|
|
while (state.braces > 0) {
|
|
if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
|
|
state.output = utils.escapeLast(state.output, '{');
|
|
decrement('braces');
|
|
}
|
|
|
|
if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
|
|
push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
|
|
}
|
|
|
|
// rebuild the output if we had to backtrack at any point
|
|
if (state.backtrack === true) {
|
|
state.output = '';
|
|
|
|
for (const token of state.tokens) {
|
|
state.output += token.output != null ? token.output : token.value;
|
|
|
|
if (token.suffix) {
|
|
state.output += token.suffix;
|
|
}
|
|
}
|
|
}
|
|
|
|
return state;
|
|
};
|
|
|
|
/**
|
|
* Fast paths for creating regular expressions for common glob patterns.
|
|
* This can significantly speed up processing and has very little downside
|
|
* impact when none of the fast paths match.
|
|
*/
|
|
|
|
parse.fastpaths = (input, options) => {
|
|
const opts = { ...options };
|
|
const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
|
|
const len = input.length;
|
|
if (len > max) {
|
|
throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
|
|
}
|
|
|
|
input = REPLACEMENTS[input] || input;
|
|
const win32 = utils.isWindows(options);
|
|
|
|
// create constants based on platform, for windows or posix
|
|
const {
|
|
DOT_LITERAL,
|
|
SLASH_LITERAL,
|
|
ONE_CHAR,
|
|
DOTS_SLASH,
|
|
NO_DOT,
|
|
NO_DOTS,
|
|
NO_DOTS_SLASH,
|
|
STAR,
|
|
START_ANCHOR
|
|
} = constants.globChars(win32);
|
|
|
|
const nodot = opts.dot ? NO_DOTS : NO_DOT;
|
|
const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
|
|
const capture = opts.capture ? '' : '?:';
|
|
const state = { negated: false, prefix: '' };
|
|
let star = opts.bash === true ? '.*?' : STAR;
|
|
|
|
if (opts.capture) {
|
|
star = `(${star})`;
|
|
}
|
|
|
|
const globstar = opts => {
|
|
if (opts.noglobstar === true) return star;
|
|
return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
|
|
};
|
|
|
|
const create = str => {
|
|
switch (str) {
|
|
case '*':
|
|
return `${nodot}${ONE_CHAR}${star}`;
|
|
|
|
case '.*':
|
|
return `${DOT_LITERAL}${ONE_CHAR}${star}`;
|
|
|
|
case '*.*':
|
|
return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
|
|
|
|
case '*/*':
|
|
return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
|
|
|
|
case '**':
|
|
return nodot + globstar(opts);
|
|
|
|
case '**/*':
|
|
return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
|
|
|
|
case '**/*.*':
|
|
return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
|
|
|
|
case '**/.*':
|
|
return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
|
|
|
|
default: {
|
|
const match = /^(.*?)\.(\w+)$/.exec(str);
|
|
if (!match) return;
|
|
|
|
const source = create(match[1]);
|
|
if (!source) return;
|
|
|
|
return source + DOT_LITERAL + match[2];
|
|
}
|
|
}
|
|
};
|
|
|
|
const output = utils.removePrefix(input, state);
|
|
let source = create(output);
|
|
|
|
if (source && opts.strictSlashes !== true) {
|
|
source += `${SLASH_LITERAL}?`;
|
|
}
|
|
|
|
return source;
|
|
};
|
|
|
|
module.exports = parse;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3322:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const path = __nccwpck_require__(1017);
|
|
const scan = __nccwpck_require__(2429);
|
|
const parse = __nccwpck_require__(2139);
|
|
const utils = __nccwpck_require__(479);
|
|
const constants = __nccwpck_require__(6099);
|
|
const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
|
|
|
|
/**
|
|
* Creates a matcher function from one or more glob patterns. The
|
|
* returned function takes a string to match as its first argument,
|
|
* and returns true if the string is a match. The returned matcher
|
|
* function also takes a boolean as the second argument that, when true,
|
|
* returns an object with additional information.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch(glob[, options]);
|
|
*
|
|
* const isMatch = picomatch('*.!(*a)');
|
|
* console.log(isMatch('a.a')); //=> false
|
|
* console.log(isMatch('a.b')); //=> true
|
|
* ```
|
|
* @name picomatch
|
|
* @param {String|Array} `globs` One or more glob patterns.
|
|
* @param {Object=} `options`
|
|
* @return {Function=} Returns a matcher function.
|
|
* @api public
|
|
*/
|
|
|
|
const picomatch = (glob, options, returnState = false) => {
|
|
if (Array.isArray(glob)) {
|
|
const fns = glob.map(input => picomatch(input, options, returnState));
|
|
const arrayMatcher = str => {
|
|
for (const isMatch of fns) {
|
|
const state = isMatch(str);
|
|
if (state) return state;
|
|
}
|
|
return false;
|
|
};
|
|
return arrayMatcher;
|
|
}
|
|
|
|
const isState = isObject(glob) && glob.tokens && glob.input;
|
|
|
|
if (glob === '' || (typeof glob !== 'string' && !isState)) {
|
|
throw new TypeError('Expected pattern to be a non-empty string');
|
|
}
|
|
|
|
const opts = options || {};
|
|
const posix = utils.isWindows(options);
|
|
const regex = isState
|
|
? picomatch.compileRe(glob, options)
|
|
: picomatch.makeRe(glob, options, false, true);
|
|
|
|
const state = regex.state;
|
|
delete regex.state;
|
|
|
|
let isIgnored = () => false;
|
|
if (opts.ignore) {
|
|
const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
|
|
isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
|
|
}
|
|
|
|
const matcher = (input, returnObject = false) => {
|
|
const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
|
|
const result = { glob, state, regex, posix, input, output, match, isMatch };
|
|
|
|
if (typeof opts.onResult === 'function') {
|
|
opts.onResult(result);
|
|
}
|
|
|
|
if (isMatch === false) {
|
|
result.isMatch = false;
|
|
return returnObject ? result : false;
|
|
}
|
|
|
|
if (isIgnored(input)) {
|
|
if (typeof opts.onIgnore === 'function') {
|
|
opts.onIgnore(result);
|
|
}
|
|
result.isMatch = false;
|
|
return returnObject ? result : false;
|
|
}
|
|
|
|
if (typeof opts.onMatch === 'function') {
|
|
opts.onMatch(result);
|
|
}
|
|
return returnObject ? result : true;
|
|
};
|
|
|
|
if (returnState) {
|
|
matcher.state = state;
|
|
}
|
|
|
|
return matcher;
|
|
};
|
|
|
|
/**
|
|
* Test `input` with the given `regex`. This is used by the main
|
|
* `picomatch()` function to test the input string.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch.test(input, regex[, options]);
|
|
*
|
|
* console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
|
|
* // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
|
|
* ```
|
|
* @param {String} `input` String to test.
|
|
* @param {RegExp} `regex`
|
|
* @return {Object} Returns an object with matching info.
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.test = (input, regex, options, { glob, posix } = {}) => {
|
|
if (typeof input !== 'string') {
|
|
throw new TypeError('Expected input to be a string');
|
|
}
|
|
|
|
if (input === '') {
|
|
return { isMatch: false, output: '' };
|
|
}
|
|
|
|
const opts = options || {};
|
|
const format = opts.format || (posix ? utils.toPosixSlashes : null);
|
|
let match = input === glob;
|
|
let output = (match && format) ? format(input) : input;
|
|
|
|
if (match === false) {
|
|
output = format ? format(input) : input;
|
|
match = output === glob;
|
|
}
|
|
|
|
if (match === false || opts.capture === true) {
|
|
if (opts.matchBase === true || opts.basename === true) {
|
|
match = picomatch.matchBase(input, regex, options, posix);
|
|
} else {
|
|
match = regex.exec(output);
|
|
}
|
|
}
|
|
|
|
return { isMatch: Boolean(match), match, output };
|
|
};
|
|
|
|
/**
|
|
* Match the basename of a filepath.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch.matchBase(input, glob[, options]);
|
|
* console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
|
|
* ```
|
|
* @param {String} `input` String to test.
|
|
* @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
|
|
* @return {Boolean}
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
|
|
const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
|
|
return regex.test(path.basename(input));
|
|
};
|
|
|
|
/**
|
|
* Returns true if **any** of the given glob `patterns` match the specified `string`.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch.isMatch(string, patterns[, options]);
|
|
*
|
|
* console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
|
|
* console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
|
|
* ```
|
|
* @param {String|Array} str The string to test.
|
|
* @param {String|Array} patterns One or more glob patterns to use for matching.
|
|
* @param {Object} [options] See available [options](#options).
|
|
* @return {Boolean} Returns true if any patterns match `str`
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
|
|
|
|
/**
|
|
* Parse a glob pattern to create the source string for a regular
|
|
* expression.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* const result = picomatch.parse(pattern[, options]);
|
|
* ```
|
|
* @param {String} `pattern`
|
|
* @param {Object} `options`
|
|
* @return {Object} Returns an object with useful properties and output to be used as a regex source string.
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.parse = (pattern, options) => {
|
|
if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
|
|
return parse(pattern, { ...options, fastpaths: false });
|
|
};
|
|
|
|
/**
|
|
* Scan a glob pattern to separate the pattern into segments.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch.scan(input[, options]);
|
|
*
|
|
* const result = picomatch.scan('!./foo/*.js');
|
|
* console.log(result);
|
|
* { prefix: '!./',
|
|
* input: '!./foo/*.js',
|
|
* start: 3,
|
|
* base: 'foo',
|
|
* glob: '*.js',
|
|
* isBrace: false,
|
|
* isBracket: false,
|
|
* isGlob: true,
|
|
* isExtglob: false,
|
|
* isGlobstar: false,
|
|
* negated: true }
|
|
* ```
|
|
* @param {String} `input` Glob pattern to scan.
|
|
* @param {Object} `options`
|
|
* @return {Object} Returns an object with
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.scan = (input, options) => scan(input, options);
|
|
|
|
/**
|
|
* Compile a regular expression from the `state` object returned by the
|
|
* [parse()](#parse) method.
|
|
*
|
|
* @param {Object} `state`
|
|
* @param {Object} `options`
|
|
* @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.
|
|
* @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.
|
|
* @return {RegExp}
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {
|
|
if (returnOutput === true) {
|
|
return state.output;
|
|
}
|
|
|
|
const opts = options || {};
|
|
const prepend = opts.contains ? '' : '^';
|
|
const append = opts.contains ? '' : '$';
|
|
|
|
let source = `${prepend}(?:${state.output})${append}`;
|
|
if (state && state.negated === true) {
|
|
source = `^(?!${source}).*$`;
|
|
}
|
|
|
|
const regex = picomatch.toRegex(source, options);
|
|
if (returnState === true) {
|
|
regex.state = state;
|
|
}
|
|
|
|
return regex;
|
|
};
|
|
|
|
/**
|
|
* Create a regular expression from a parsed glob pattern.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* const state = picomatch.parse('*.js');
|
|
* // picomatch.compileRe(state[, options]);
|
|
*
|
|
* console.log(picomatch.compileRe(state));
|
|
* //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
|
|
* ```
|
|
* @param {String} `state` The object returned from the `.parse` method.
|
|
* @param {Object} `options`
|
|
* @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.
|
|
* @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.
|
|
* @return {RegExp} Returns a regex created from the given pattern.
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {
|
|
if (!input || typeof input !== 'string') {
|
|
throw new TypeError('Expected a non-empty string');
|
|
}
|
|
|
|
let parsed = { negated: false, fastpaths: true };
|
|
|
|
if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
|
|
parsed.output = parse.fastpaths(input, options);
|
|
}
|
|
|
|
if (!parsed.output) {
|
|
parsed = parse(input, options);
|
|
}
|
|
|
|
return picomatch.compileRe(parsed, options, returnOutput, returnState);
|
|
};
|
|
|
|
/**
|
|
* Create a regular expression from the given regex source string.
|
|
*
|
|
* ```js
|
|
* const picomatch = require('picomatch');
|
|
* // picomatch.toRegex(source[, options]);
|
|
*
|
|
* const { output } = picomatch.parse('*.js');
|
|
* console.log(picomatch.toRegex(output));
|
|
* //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
|
|
* ```
|
|
* @param {String} `source` Regular expression source string.
|
|
* @param {Object} `options`
|
|
* @return {RegExp}
|
|
* @api public
|
|
*/
|
|
|
|
picomatch.toRegex = (source, options) => {
|
|
try {
|
|
const opts = options || {};
|
|
return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
|
|
} catch (err) {
|
|
if (options && options.debug === true) throw err;
|
|
return /$^/;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Picomatch constants.
|
|
* @return {Object}
|
|
*/
|
|
|
|
picomatch.constants = constants;
|
|
|
|
/**
|
|
* Expose "picomatch"
|
|
*/
|
|
|
|
module.exports = picomatch;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2429:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const utils = __nccwpck_require__(479);
|
|
const {
|
|
CHAR_ASTERISK, /* * */
|
|
CHAR_AT, /* @ */
|
|
CHAR_BACKWARD_SLASH, /* \ */
|
|
CHAR_COMMA, /* , */
|
|
CHAR_DOT, /* . */
|
|
CHAR_EXCLAMATION_MARK, /* ! */
|
|
CHAR_FORWARD_SLASH, /* / */
|
|
CHAR_LEFT_CURLY_BRACE, /* { */
|
|
CHAR_LEFT_PARENTHESES, /* ( */
|
|
CHAR_LEFT_SQUARE_BRACKET, /* [ */
|
|
CHAR_PLUS, /* + */
|
|
CHAR_QUESTION_MARK, /* ? */
|
|
CHAR_RIGHT_CURLY_BRACE, /* } */
|
|
CHAR_RIGHT_PARENTHESES, /* ) */
|
|
CHAR_RIGHT_SQUARE_BRACKET /* ] */
|
|
} = __nccwpck_require__(6099);
|
|
|
|
const isPathSeparator = code => {
|
|
return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
|
|
};
|
|
|
|
const depth = token => {
|
|
if (token.isPrefix !== true) {
|
|
token.depth = token.isGlobstar ? Infinity : 1;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Quickly scans a glob pattern and returns an object with a handful of
|
|
* useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
|
|
* `glob` (the actual pattern), `negated` (true if the path starts with `!` but not
|
|
* with `!(`) and `negatedExtglob` (true if the path starts with `!(`).
|
|
*
|
|
* ```js
|
|
* const pm = require('picomatch');
|
|
* console.log(pm.scan('foo/bar/*.js'));
|
|
* { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
|
|
* ```
|
|
* @param {String} `str`
|
|
* @param {Object} `options`
|
|
* @return {Object} Returns an object with tokens and regex source string.
|
|
* @api public
|
|
*/
|
|
|
|
const scan = (input, options) => {
|
|
const opts = options || {};
|
|
|
|
const length = input.length - 1;
|
|
const scanToEnd = opts.parts === true || opts.scanToEnd === true;
|
|
const slashes = [];
|
|
const tokens = [];
|
|
const parts = [];
|
|
|
|
let str = input;
|
|
let index = -1;
|
|
let start = 0;
|
|
let lastIndex = 0;
|
|
let isBrace = false;
|
|
let isBracket = false;
|
|
let isGlob = false;
|
|
let isExtglob = false;
|
|
let isGlobstar = false;
|
|
let braceEscaped = false;
|
|
let backslashes = false;
|
|
let negated = false;
|
|
let negatedExtglob = false;
|
|
let finished = false;
|
|
let braces = 0;
|
|
let prev;
|
|
let code;
|
|
let token = { value: '', depth: 0, isGlob: false };
|
|
|
|
const eos = () => index >= length;
|
|
const peek = () => str.charCodeAt(index + 1);
|
|
const advance = () => {
|
|
prev = code;
|
|
return str.charCodeAt(++index);
|
|
};
|
|
|
|
while (index < length) {
|
|
code = advance();
|
|
let next;
|
|
|
|
if (code === CHAR_BACKWARD_SLASH) {
|
|
backslashes = token.backslashes = true;
|
|
code = advance();
|
|
|
|
if (code === CHAR_LEFT_CURLY_BRACE) {
|
|
braceEscaped = true;
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
|
|
braces++;
|
|
|
|
while (eos() !== true && (code = advance())) {
|
|
if (code === CHAR_BACKWARD_SLASH) {
|
|
backslashes = token.backslashes = true;
|
|
advance();
|
|
continue;
|
|
}
|
|
|
|
if (code === CHAR_LEFT_CURLY_BRACE) {
|
|
braces++;
|
|
continue;
|
|
}
|
|
|
|
if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
|
|
isBrace = token.isBrace = true;
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (braceEscaped !== true && code === CHAR_COMMA) {
|
|
isBrace = token.isBrace = true;
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (code === CHAR_RIGHT_CURLY_BRACE) {
|
|
braces--;
|
|
|
|
if (braces === 0) {
|
|
braceEscaped = false;
|
|
isBrace = token.isBrace = true;
|
|
finished = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (code === CHAR_FORWARD_SLASH) {
|
|
slashes.push(index);
|
|
tokens.push(token);
|
|
token = { value: '', depth: 0, isGlob: false };
|
|
|
|
if (finished === true) continue;
|
|
if (prev === CHAR_DOT && index === (start + 1)) {
|
|
start += 2;
|
|
continue;
|
|
}
|
|
|
|
lastIndex = index + 1;
|
|
continue;
|
|
}
|
|
|
|
if (opts.noext !== true) {
|
|
const isExtglobChar = code === CHAR_PLUS
|
|
|| code === CHAR_AT
|
|
|| code === CHAR_ASTERISK
|
|
|| code === CHAR_QUESTION_MARK
|
|
|| code === CHAR_EXCLAMATION_MARK;
|
|
|
|
if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
|
|
isGlob = token.isGlob = true;
|
|
isExtglob = token.isExtglob = true;
|
|
finished = true;
|
|
if (code === CHAR_EXCLAMATION_MARK && index === start) {
|
|
negatedExtglob = true;
|
|
}
|
|
|
|
if (scanToEnd === true) {
|
|
while (eos() !== true && (code = advance())) {
|
|
if (code === CHAR_BACKWARD_SLASH) {
|
|
backslashes = token.backslashes = true;
|
|
code = advance();
|
|
continue;
|
|
}
|
|
|
|
if (code === CHAR_RIGHT_PARENTHESES) {
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
break;
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (code === CHAR_ASTERISK) {
|
|
if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (code === CHAR_QUESTION_MARK) {
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (code === CHAR_LEFT_SQUARE_BRACKET) {
|
|
while (eos() !== true && (next = advance())) {
|
|
if (next === CHAR_BACKWARD_SLASH) {
|
|
backslashes = token.backslashes = true;
|
|
advance();
|
|
continue;
|
|
}
|
|
|
|
if (next === CHAR_RIGHT_SQUARE_BRACKET) {
|
|
isBracket = token.isBracket = true;
|
|
isGlob = token.isGlob = true;
|
|
finished = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
|
|
negated = token.negated = true;
|
|
start++;
|
|
continue;
|
|
}
|
|
|
|
if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
|
|
isGlob = token.isGlob = true;
|
|
|
|
if (scanToEnd === true) {
|
|
while (eos() !== true && (code = advance())) {
|
|
if (code === CHAR_LEFT_PARENTHESES) {
|
|
backslashes = token.backslashes = true;
|
|
code = advance();
|
|
continue;
|
|
}
|
|
|
|
if (code === CHAR_RIGHT_PARENTHESES) {
|
|
finished = true;
|
|
break;
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (isGlob === true) {
|
|
finished = true;
|
|
|
|
if (scanToEnd === true) {
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (opts.noext === true) {
|
|
isExtglob = false;
|
|
isGlob = false;
|
|
}
|
|
|
|
let base = str;
|
|
let prefix = '';
|
|
let glob = '';
|
|
|
|
if (start > 0) {
|
|
prefix = str.slice(0, start);
|
|
str = str.slice(start);
|
|
lastIndex -= start;
|
|
}
|
|
|
|
if (base && isGlob === true && lastIndex > 0) {
|
|
base = str.slice(0, lastIndex);
|
|
glob = str.slice(lastIndex);
|
|
} else if (isGlob === true) {
|
|
base = '';
|
|
glob = str;
|
|
} else {
|
|
base = str;
|
|
}
|
|
|
|
if (base && base !== '' && base !== '/' && base !== str) {
|
|
if (isPathSeparator(base.charCodeAt(base.length - 1))) {
|
|
base = base.slice(0, -1);
|
|
}
|
|
}
|
|
|
|
if (opts.unescape === true) {
|
|
if (glob) glob = utils.removeBackslashes(glob);
|
|
|
|
if (base && backslashes === true) {
|
|
base = utils.removeBackslashes(base);
|
|
}
|
|
}
|
|
|
|
const state = {
|
|
prefix,
|
|
input,
|
|
start,
|
|
base,
|
|
glob,
|
|
isBrace,
|
|
isBracket,
|
|
isGlob,
|
|
isExtglob,
|
|
isGlobstar,
|
|
negated,
|
|
negatedExtglob
|
|
};
|
|
|
|
if (opts.tokens === true) {
|
|
state.maxDepth = 0;
|
|
if (!isPathSeparator(code)) {
|
|
tokens.push(token);
|
|
}
|
|
state.tokens = tokens;
|
|
}
|
|
|
|
if (opts.parts === true || opts.tokens === true) {
|
|
let prevIndex;
|
|
|
|
for (let idx = 0; idx < slashes.length; idx++) {
|
|
const n = prevIndex ? prevIndex + 1 : start;
|
|
const i = slashes[idx];
|
|
const value = input.slice(n, i);
|
|
if (opts.tokens) {
|
|
if (idx === 0 && start !== 0) {
|
|
tokens[idx].isPrefix = true;
|
|
tokens[idx].value = prefix;
|
|
} else {
|
|
tokens[idx].value = value;
|
|
}
|
|
depth(tokens[idx]);
|
|
state.maxDepth += tokens[idx].depth;
|
|
}
|
|
if (idx !== 0 || value !== '') {
|
|
parts.push(value);
|
|
}
|
|
prevIndex = i;
|
|
}
|
|
|
|
if (prevIndex && prevIndex + 1 < input.length) {
|
|
const value = input.slice(prevIndex + 1);
|
|
parts.push(value);
|
|
|
|
if (opts.tokens) {
|
|
tokens[tokens.length - 1].value = value;
|
|
depth(tokens[tokens.length - 1]);
|
|
state.maxDepth += tokens[tokens.length - 1].depth;
|
|
}
|
|
}
|
|
|
|
state.slashes = slashes;
|
|
state.parts = parts;
|
|
}
|
|
|
|
return state;
|
|
};
|
|
|
|
module.exports = scan;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 479:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const path = __nccwpck_require__(1017);
|
|
const win32 = process.platform === 'win32';
|
|
const {
|
|
REGEX_BACKSLASH,
|
|
REGEX_REMOVE_BACKSLASH,
|
|
REGEX_SPECIAL_CHARS,
|
|
REGEX_SPECIAL_CHARS_GLOBAL
|
|
} = __nccwpck_require__(6099);
|
|
|
|
exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
|
|
exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
|
|
exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
|
|
exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
|
|
exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
|
|
|
|
exports.removeBackslashes = str => {
|
|
return str.replace(REGEX_REMOVE_BACKSLASH, match => {
|
|
return match === '\\' ? '' : match;
|
|
});
|
|
};
|
|
|
|
exports.supportsLookbehinds = () => {
|
|
const segs = process.version.slice(1).split('.').map(Number);
|
|
if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
exports.isWindows = options => {
|
|
if (options && typeof options.windows === 'boolean') {
|
|
return options.windows;
|
|
}
|
|
return win32 === true || path.sep === '\\';
|
|
};
|
|
|
|
exports.escapeLast = (input, char, lastIdx) => {
|
|
const idx = input.lastIndexOf(char, lastIdx);
|
|
if (idx === -1) return input;
|
|
if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
|
|
return `${input.slice(0, idx)}\\${input.slice(idx)}`;
|
|
};
|
|
|
|
exports.removePrefix = (input, state = {}) => {
|
|
let output = input;
|
|
if (output.startsWith('./')) {
|
|
output = output.slice(2);
|
|
state.prefix = './';
|
|
}
|
|
return output;
|
|
};
|
|
|
|
exports.wrapOutput = (input, state = {}, options = {}) => {
|
|
const prepend = options.contains ? '' : '^';
|
|
const append = options.contains ? '' : '$';
|
|
|
|
let output = `${prepend}(?:${input})${append}`;
|
|
if (state.negated === true) {
|
|
output = `(?:^(?!${output}).*$)`;
|
|
}
|
|
return output;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8341:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
var once = __nccwpck_require__(1223)
|
|
var eos = __nccwpck_require__(1205)
|
|
var fs = __nccwpck_require__(7147) // we only need fs to get the ReadStream and WriteStream prototypes
|
|
|
|
var noop = function () {}
|
|
var ancient = /^v?\.0/.test(process.version)
|
|
|
|
var isFn = function (fn) {
|
|
return typeof fn === 'function'
|
|
}
|
|
|
|
var isFS = function (stream) {
|
|
if (!ancient) return false // newer node version do not need to care about fs is a special way
|
|
if (!fs) return false // browser
|
|
return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
|
|
}
|
|
|
|
var isRequest = function (stream) {
|
|
return stream.setHeader && isFn(stream.abort)
|
|
}
|
|
|
|
var destroyer = function (stream, reading, writing, callback) {
|
|
callback = once(callback)
|
|
|
|
var closed = false
|
|
stream.on('close', function () {
|
|
closed = true
|
|
})
|
|
|
|
eos(stream, {readable: reading, writable: writing}, function (err) {
|
|
if (err) return callback(err)
|
|
closed = true
|
|
callback()
|
|
})
|
|
|
|
var destroyed = false
|
|
return function (err) {
|
|
if (closed) return
|
|
if (destroyed) return
|
|
destroyed = true
|
|
|
|
if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
|
|
if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
|
|
|
|
if (isFn(stream.destroy)) return stream.destroy()
|
|
|
|
callback(err || new Error('stream was destroyed'))
|
|
}
|
|
}
|
|
|
|
var call = function (fn) {
|
|
fn()
|
|
}
|
|
|
|
var pipe = function (from, to) {
|
|
return from.pipe(to)
|
|
}
|
|
|
|
var pump = function () {
|
|
var streams = Array.prototype.slice.call(arguments)
|
|
var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
|
|
|
|
if (Array.isArray(streams[0])) streams = streams[0]
|
|
if (streams.length < 2) throw new Error('pump requires two streams per minimum')
|
|
|
|
var error
|
|
var destroys = streams.map(function (stream, i) {
|
|
var reading = i < streams.length - 1
|
|
var writing = i > 0
|
|
return destroyer(stream, reading, writing, function (err) {
|
|
if (!error) error = err
|
|
if (err) destroys.forEach(call)
|
|
if (reading) return
|
|
destroys.forEach(call)
|
|
callback(error)
|
|
})
|
|
})
|
|
|
|
return streams.reduce(pipe)
|
|
}
|
|
|
|
module.exports = pump
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9795:
|
|
/***/ ((module) => {
|
|
|
|
/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
let promise
|
|
|
|
module.exports = typeof queueMicrotask === 'function'
|
|
? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)
|
|
// reuse resolved promise, and allocate it lazily
|
|
: cb => (promise || (promise = Promise.resolve()))
|
|
.then(cb)
|
|
.catch(err => setTimeout(() => { throw err }, 0))
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9273:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
class QuickLRU {
|
|
constructor(options = {}) {
|
|
if (!(options.maxSize && options.maxSize > 0)) {
|
|
throw new TypeError('`maxSize` must be a number greater than 0');
|
|
}
|
|
|
|
this.maxSize = options.maxSize;
|
|
this.onEviction = options.onEviction;
|
|
this.cache = new Map();
|
|
this.oldCache = new Map();
|
|
this._size = 0;
|
|
}
|
|
|
|
_set(key, value) {
|
|
this.cache.set(key, value);
|
|
this._size++;
|
|
|
|
if (this._size >= this.maxSize) {
|
|
this._size = 0;
|
|
|
|
if (typeof this.onEviction === 'function') {
|
|
for (const [key, value] of this.oldCache.entries()) {
|
|
this.onEviction(key, value);
|
|
}
|
|
}
|
|
|
|
this.oldCache = this.cache;
|
|
this.cache = new Map();
|
|
}
|
|
}
|
|
|
|
get(key) {
|
|
if (this.cache.has(key)) {
|
|
return this.cache.get(key);
|
|
}
|
|
|
|
if (this.oldCache.has(key)) {
|
|
const value = this.oldCache.get(key);
|
|
this.oldCache.delete(key);
|
|
this._set(key, value);
|
|
return value;
|
|
}
|
|
}
|
|
|
|
set(key, value) {
|
|
if (this.cache.has(key)) {
|
|
this.cache.set(key, value);
|
|
} else {
|
|
this._set(key, value);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
has(key) {
|
|
return this.cache.has(key) || this.oldCache.has(key);
|
|
}
|
|
|
|
peek(key) {
|
|
if (this.cache.has(key)) {
|
|
return this.cache.get(key);
|
|
}
|
|
|
|
if (this.oldCache.has(key)) {
|
|
return this.oldCache.get(key);
|
|
}
|
|
}
|
|
|
|
delete(key) {
|
|
const deleted = this.cache.delete(key);
|
|
if (deleted) {
|
|
this._size--;
|
|
}
|
|
|
|
return this.oldCache.delete(key) || deleted;
|
|
}
|
|
|
|
clear() {
|
|
this.cache.clear();
|
|
this.oldCache.clear();
|
|
this._size = 0;
|
|
}
|
|
|
|
* keys() {
|
|
for (const [key] of this) {
|
|
yield key;
|
|
}
|
|
}
|
|
|
|
* values() {
|
|
for (const [, value] of this) {
|
|
yield value;
|
|
}
|
|
}
|
|
|
|
* [Symbol.iterator]() {
|
|
for (const item of this.cache) {
|
|
yield item;
|
|
}
|
|
|
|
for (const item of this.oldCache) {
|
|
const [key] = item;
|
|
if (!this.cache.has(key)) {
|
|
yield item;
|
|
}
|
|
}
|
|
}
|
|
|
|
get size() {
|
|
let oldCacheSize = 0;
|
|
for (const key of this.oldCache.keys()) {
|
|
if (!this.cache.has(key)) {
|
|
oldCacheSize++;
|
|
}
|
|
}
|
|
|
|
return Math.min(this._size + oldCacheSize, this.maxSize);
|
|
}
|
|
}
|
|
|
|
module.exports = QuickLRU;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6624:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const tls = __nccwpck_require__(4404);
|
|
|
|
module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
|
|
let timeout = false;
|
|
|
|
let socket;
|
|
|
|
const callback = async () => {
|
|
await socketPromise;
|
|
|
|
socket.off('timeout', onTimeout);
|
|
socket.off('error', reject);
|
|
|
|
if (options.resolveSocket) {
|
|
resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
|
|
|
|
if (timeout) {
|
|
await Promise.resolve();
|
|
socket.emit('timeout');
|
|
}
|
|
} else {
|
|
socket.destroy();
|
|
resolve({alpnProtocol: socket.alpnProtocol, timeout});
|
|
}
|
|
};
|
|
|
|
const onTimeout = async () => {
|
|
timeout = true;
|
|
callback();
|
|
};
|
|
|
|
const socketPromise = (async () => {
|
|
try {
|
|
socket = await connect(options, callback);
|
|
|
|
socket.on('error', reject);
|
|
socket.once('timeout', onTimeout);
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
})();
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2075:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
module.exports = object => {
|
|
const result = {};
|
|
|
|
for (const [key, value] of Object.entries(object)) {
|
|
result[key.toLowerCase()] = value;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9004:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
const Readable = (__nccwpck_require__(2781).Readable);
|
|
const lowercaseKeys = __nccwpck_require__(2075);
|
|
|
|
class Response extends Readable {
|
|
constructor(statusCode, headers, body, url) {
|
|
if (typeof statusCode !== 'number') {
|
|
throw new TypeError('Argument `statusCode` should be a number');
|
|
}
|
|
if (typeof headers !== 'object') {
|
|
throw new TypeError('Argument `headers` should be an object');
|
|
}
|
|
if (!(body instanceof Buffer)) {
|
|
throw new TypeError('Argument `body` should be a buffer');
|
|
}
|
|
if (typeof url !== 'string') {
|
|
throw new TypeError('Argument `url` should be a string');
|
|
}
|
|
|
|
super();
|
|
this.statusCode = statusCode;
|
|
this.headers = lowercaseKeys(headers);
|
|
this.body = body;
|
|
this.url = url;
|
|
}
|
|
|
|
_read() {
|
|
this.push(this.body);
|
|
this.push(null);
|
|
}
|
|
}
|
|
|
|
module.exports = Response;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2113:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
function reusify (Constructor) {
|
|
var head = new Constructor()
|
|
var tail = head
|
|
|
|
function get () {
|
|
var current = head
|
|
|
|
if (current.next) {
|
|
head = current.next
|
|
} else {
|
|
head = new Constructor()
|
|
tail = head
|
|
}
|
|
|
|
current.next = null
|
|
|
|
return current
|
|
}
|
|
|
|
function release (obj) {
|
|
tail.next = obj
|
|
tail = obj
|
|
}
|
|
|
|
return {
|
|
get: get,
|
|
release: release
|
|
}
|
|
}
|
|
|
|
module.exports = reusify
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5288:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
module.exports = runParallel
|
|
|
|
const queueMicrotask = __nccwpck_require__(9795)
|
|
|
|
function runParallel (tasks, cb) {
|
|
let results, pending, keys
|
|
let isSync = true
|
|
|
|
if (Array.isArray(tasks)) {
|
|
results = []
|
|
pending = tasks.length
|
|
} else {
|
|
keys = Object.keys(tasks)
|
|
results = {}
|
|
pending = keys.length
|
|
}
|
|
|
|
function done (err) {
|
|
function end () {
|
|
if (cb) cb(err, results)
|
|
cb = null
|
|
}
|
|
if (isSync) queueMicrotask(end)
|
|
else end()
|
|
}
|
|
|
|
function each (i, err, result) {
|
|
results[i] = result
|
|
if (--pending === 0 || err) {
|
|
done(err)
|
|
}
|
|
}
|
|
|
|
if (!pending) {
|
|
// empty
|
|
done(null)
|
|
} else if (keys) {
|
|
// object
|
|
keys.forEach(function (key) {
|
|
tasks[key](function (err, result) { each(key, err, result) })
|
|
})
|
|
} else {
|
|
// array
|
|
tasks.forEach(function (task, i) {
|
|
task(function (err, result) { each(i, err, result) })
|
|
})
|
|
}
|
|
|
|
isSync = false
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2043:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
;(function (sax) { // wrapper for non-node envs
|
|
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
|
|
sax.SAXParser = SAXParser
|
|
sax.SAXStream = SAXStream
|
|
sax.createStream = createStream
|
|
|
|
// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.
|
|
// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),
|
|
// since that's the earliest that a buffer overrun could occur. This way, checks are
|
|
// as rare as required, but as often as necessary to ensure never crossing this bound.
|
|
// Furthermore, buffers are only tested at most once per write(), so passing a very
|
|
// large string into write() might have undesirable effects, but this is manageable by
|
|
// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme
|
|
// edge case, result in creating at most one complete copy of the string passed in.
|
|
// Set to Infinity to have unlimited buffers.
|
|
sax.MAX_BUFFER_LENGTH = 64 * 1024
|
|
|
|
var buffers = [
|
|
'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',
|
|
'procInstName', 'procInstBody', 'entity', 'attribName',
|
|
'attribValue', 'cdata', 'script'
|
|
]
|
|
|
|
sax.EVENTS = [
|
|
'text',
|
|
'processinginstruction',
|
|
'sgmldeclaration',
|
|
'doctype',
|
|
'comment',
|
|
'opentagstart',
|
|
'attribute',
|
|
'opentag',
|
|
'closetag',
|
|
'opencdata',
|
|
'cdata',
|
|
'closecdata',
|
|
'error',
|
|
'end',
|
|
'ready',
|
|
'script',
|
|
'opennamespace',
|
|
'closenamespace'
|
|
]
|
|
|
|
function SAXParser (strict, opt) {
|
|
if (!(this instanceof SAXParser)) {
|
|
return new SAXParser(strict, opt)
|
|
}
|
|
|
|
var parser = this
|
|
clearBuffers(parser)
|
|
parser.q = parser.c = ''
|
|
parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
|
|
parser.opt = opt || {}
|
|
parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags
|
|
parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'
|
|
parser.tags = []
|
|
parser.closed = parser.closedRoot = parser.sawRoot = false
|
|
parser.tag = parser.error = null
|
|
parser.strict = !!strict
|
|
parser.noscript = !!(strict || parser.opt.noscript)
|
|
parser.state = S.BEGIN
|
|
parser.strictEntities = parser.opt.strictEntities
|
|
parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)
|
|
parser.attribList = []
|
|
|
|
// namespaces form a prototype chain.
|
|
// it always points at the current tag,
|
|
// which protos to its parent tag.
|
|
if (parser.opt.xmlns) {
|
|
parser.ns = Object.create(rootNS)
|
|
}
|
|
|
|
// mostly just for error reporting
|
|
parser.trackPosition = parser.opt.position !== false
|
|
if (parser.trackPosition) {
|
|
parser.position = parser.line = parser.column = 0
|
|
}
|
|
emit(parser, 'onready')
|
|
}
|
|
|
|
if (!Object.create) {
|
|
Object.create = function (o) {
|
|
function F () {}
|
|
F.prototype = o
|
|
var newf = new F()
|
|
return newf
|
|
}
|
|
}
|
|
|
|
if (!Object.keys) {
|
|
Object.keys = function (o) {
|
|
var a = []
|
|
for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
|
|
return a
|
|
}
|
|
}
|
|
|
|
function checkBufferLength (parser) {
|
|
var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
|
|
var maxActual = 0
|
|
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
var len = parser[buffers[i]].length
|
|
if (len > maxAllowed) {
|
|
// Text/cdata nodes can get big, and since they're buffered,
|
|
// we can get here under normal conditions.
|
|
// Avoid issues by emitting the text node now,
|
|
// so at least it won't get any bigger.
|
|
switch (buffers[i]) {
|
|
case 'textNode':
|
|
closeText(parser)
|
|
break
|
|
|
|
case 'cdata':
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
parser.cdata = ''
|
|
break
|
|
|
|
case 'script':
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
break
|
|
|
|
default:
|
|
error(parser, 'Max buffer length exceeded: ' + buffers[i])
|
|
}
|
|
}
|
|
maxActual = Math.max(maxActual, len)
|
|
}
|
|
// schedule the next check for the earliest possible buffer overrun.
|
|
var m = sax.MAX_BUFFER_LENGTH - maxActual
|
|
parser.bufferCheckPosition = m + parser.position
|
|
}
|
|
|
|
function clearBuffers (parser) {
|
|
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
parser[buffers[i]] = ''
|
|
}
|
|
}
|
|
|
|
function flushBuffers (parser) {
|
|
closeText(parser)
|
|
if (parser.cdata !== '') {
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
parser.cdata = ''
|
|
}
|
|
if (parser.script !== '') {
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
}
|
|
}
|
|
|
|
SAXParser.prototype = {
|
|
end: function () { end(this) },
|
|
write: write,
|
|
resume: function () { this.error = null; return this },
|
|
close: function () { return this.write(null) },
|
|
flush: function () { flushBuffers(this) }
|
|
}
|
|
|
|
var Stream
|
|
try {
|
|
Stream = (__nccwpck_require__(2781).Stream)
|
|
} catch (ex) {
|
|
Stream = function () {}
|
|
}
|
|
|
|
var streamWraps = sax.EVENTS.filter(function (ev) {
|
|
return ev !== 'error' && ev !== 'end'
|
|
})
|
|
|
|
function createStream (strict, opt) {
|
|
return new SAXStream(strict, opt)
|
|
}
|
|
|
|
function SAXStream (strict, opt) {
|
|
if (!(this instanceof SAXStream)) {
|
|
return new SAXStream(strict, opt)
|
|
}
|
|
|
|
Stream.apply(this)
|
|
|
|
this._parser = new SAXParser(strict, opt)
|
|
this.writable = true
|
|
this.readable = true
|
|
|
|
var me = this
|
|
|
|
this._parser.onend = function () {
|
|
me.emit('end')
|
|
}
|
|
|
|
this._parser.onerror = function (er) {
|
|
me.emit('error', er)
|
|
|
|
// if didn't throw, then means error was handled.
|
|
// go ahead and clear error, so we can write again.
|
|
me._parser.error = null
|
|
}
|
|
|
|
this._decoder = null
|
|
|
|
streamWraps.forEach(function (ev) {
|
|
Object.defineProperty(me, 'on' + ev, {
|
|
get: function () {
|
|
return me._parser['on' + ev]
|
|
},
|
|
set: function (h) {
|
|
if (!h) {
|
|
me.removeAllListeners(ev)
|
|
me._parser['on' + ev] = h
|
|
return h
|
|
}
|
|
me.on(ev, h)
|
|
},
|
|
enumerable: true,
|
|
configurable: false
|
|
})
|
|
})
|
|
}
|
|
|
|
SAXStream.prototype = Object.create(Stream.prototype, {
|
|
constructor: {
|
|
value: SAXStream
|
|
}
|
|
})
|
|
|
|
SAXStream.prototype.write = function (data) {
|
|
if (typeof Buffer === 'function' &&
|
|
typeof Buffer.isBuffer === 'function' &&
|
|
Buffer.isBuffer(data)) {
|
|
if (!this._decoder) {
|
|
var SD = (__nccwpck_require__(1576).StringDecoder)
|
|
this._decoder = new SD('utf8')
|
|
}
|
|
data = this._decoder.write(data)
|
|
}
|
|
|
|
this._parser.write(data.toString())
|
|
this.emit('data', data)
|
|
return true
|
|
}
|
|
|
|
SAXStream.prototype.end = function (chunk) {
|
|
if (chunk && chunk.length) {
|
|
this.write(chunk)
|
|
}
|
|
this._parser.end()
|
|
return true
|
|
}
|
|
|
|
SAXStream.prototype.on = function (ev, handler) {
|
|
var me = this
|
|
if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {
|
|
me._parser['on' + ev] = function () {
|
|
var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)
|
|
args.splice(0, 0, ev)
|
|
me.emit.apply(me, args)
|
|
}
|
|
}
|
|
|
|
return Stream.prototype.on.call(me, ev, handler)
|
|
}
|
|
|
|
// this really needs to be replaced with character classes.
|
|
// XML allows all manner of ridiculous numbers and digits.
|
|
var CDATA = '[CDATA['
|
|
var DOCTYPE = 'DOCTYPE'
|
|
var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
|
|
var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'
|
|
var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
|
|
|
|
// http://www.w3.org/TR/REC-xml/#NT-NameStartChar
|
|
// This implementation works on strings, a single character at a time
|
|
// as such, it cannot ever support astral-plane characters (10000-EFFFF)
|
|
// without a significant breaking change to either this parser, or the
|
|
// JavaScript language. Implementation of an emoji-capable xml parser
|
|
// is left as an exercise for the reader.
|
|
var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
|
|
|
|
var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
|
|
|
|
var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
|
|
var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
|
|
|
|
function isWhitespace (c) {
|
|
return c === ' ' || c === '\n' || c === '\r' || c === '\t'
|
|
}
|
|
|
|
function isQuote (c) {
|
|
return c === '"' || c === '\''
|
|
}
|
|
|
|
function isAttribEnd (c) {
|
|
return c === '>' || isWhitespace(c)
|
|
}
|
|
|
|
function isMatch (regex, c) {
|
|
return regex.test(c)
|
|
}
|
|
|
|
function notMatch (regex, c) {
|
|
return !isMatch(regex, c)
|
|
}
|
|
|
|
var S = 0
|
|
sax.STATE = {
|
|
BEGIN: S++, // leading byte order mark or whitespace
|
|
BEGIN_WHITESPACE: S++, // leading whitespace
|
|
TEXT: S++, // general stuff
|
|
TEXT_ENTITY: S++, // & and such.
|
|
OPEN_WAKA: S++, // <
|
|
SGML_DECL: S++, // <!BLARG
|
|
SGML_DECL_QUOTED: S++, // <!BLARG foo "bar
|
|
DOCTYPE: S++, // <!DOCTYPE
|
|
DOCTYPE_QUOTED: S++, // <!DOCTYPE "//blah
|
|
DOCTYPE_DTD: S++, // <!DOCTYPE "//blah" [ ...
|
|
DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE "//blah" [ "foo
|
|
COMMENT_STARTING: S++, // <!-
|
|
COMMENT: S++, // <!--
|
|
COMMENT_ENDING: S++, // <!-- blah -
|
|
COMMENT_ENDED: S++, // <!-- blah --
|
|
CDATA: S++, // <![CDATA[ something
|
|
CDATA_ENDING: S++, // ]
|
|
CDATA_ENDING_2: S++, // ]]
|
|
PROC_INST: S++, // <?hi
|
|
PROC_INST_BODY: S++, // <?hi there
|
|
PROC_INST_ENDING: S++, // <?hi "there" ?
|
|
OPEN_TAG: S++, // <strong
|
|
OPEN_TAG_SLASH: S++, // <strong /
|
|
ATTRIB: S++, // <a
|
|
ATTRIB_NAME: S++, // <a foo
|
|
ATTRIB_NAME_SAW_WHITE: S++, // <a foo _
|
|
ATTRIB_VALUE: S++, // <a foo=
|
|
ATTRIB_VALUE_QUOTED: S++, // <a foo="bar
|
|
ATTRIB_VALUE_CLOSED: S++, // <a foo="bar"
|
|
ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar
|
|
ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar="""
|
|
ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="
|
|
CLOSE_TAG: S++, // </a
|
|
CLOSE_TAG_SAW_WHITE: S++, // </a >
|
|
SCRIPT: S++, // <script> ...
|
|
SCRIPT_ENDING: S++ // <script> ... <
|
|
}
|
|
|
|
sax.XML_ENTITIES = {
|
|
'amp': '&',
|
|
'gt': '>',
|
|
'lt': '<',
|
|
'quot': '"',
|
|
'apos': "'"
|
|
}
|
|
|
|
sax.ENTITIES = {
|
|
'amp': '&',
|
|
'gt': '>',
|
|
'lt': '<',
|
|
'quot': '"',
|
|
'apos': "'",
|
|
'AElig': 198,
|
|
'Aacute': 193,
|
|
'Acirc': 194,
|
|
'Agrave': 192,
|
|
'Aring': 197,
|
|
'Atilde': 195,
|
|
'Auml': 196,
|
|
'Ccedil': 199,
|
|
'ETH': 208,
|
|
'Eacute': 201,
|
|
'Ecirc': 202,
|
|
'Egrave': 200,
|
|
'Euml': 203,
|
|
'Iacute': 205,
|
|
'Icirc': 206,
|
|
'Igrave': 204,
|
|
'Iuml': 207,
|
|
'Ntilde': 209,
|
|
'Oacute': 211,
|
|
'Ocirc': 212,
|
|
'Ograve': 210,
|
|
'Oslash': 216,
|
|
'Otilde': 213,
|
|
'Ouml': 214,
|
|
'THORN': 222,
|
|
'Uacute': 218,
|
|
'Ucirc': 219,
|
|
'Ugrave': 217,
|
|
'Uuml': 220,
|
|
'Yacute': 221,
|
|
'aacute': 225,
|
|
'acirc': 226,
|
|
'aelig': 230,
|
|
'agrave': 224,
|
|
'aring': 229,
|
|
'atilde': 227,
|
|
'auml': 228,
|
|
'ccedil': 231,
|
|
'eacute': 233,
|
|
'ecirc': 234,
|
|
'egrave': 232,
|
|
'eth': 240,
|
|
'euml': 235,
|
|
'iacute': 237,
|
|
'icirc': 238,
|
|
'igrave': 236,
|
|
'iuml': 239,
|
|
'ntilde': 241,
|
|
'oacute': 243,
|
|
'ocirc': 244,
|
|
'ograve': 242,
|
|
'oslash': 248,
|
|
'otilde': 245,
|
|
'ouml': 246,
|
|
'szlig': 223,
|
|
'thorn': 254,
|
|
'uacute': 250,
|
|
'ucirc': 251,
|
|
'ugrave': 249,
|
|
'uuml': 252,
|
|
'yacute': 253,
|
|
'yuml': 255,
|
|
'copy': 169,
|
|
'reg': 174,
|
|
'nbsp': 160,
|
|
'iexcl': 161,
|
|
'cent': 162,
|
|
'pound': 163,
|
|
'curren': 164,
|
|
'yen': 165,
|
|
'brvbar': 166,
|
|
'sect': 167,
|
|
'uml': 168,
|
|
'ordf': 170,
|
|
'laquo': 171,
|
|
'not': 172,
|
|
'shy': 173,
|
|
'macr': 175,
|
|
'deg': 176,
|
|
'plusmn': 177,
|
|
'sup1': 185,
|
|
'sup2': 178,
|
|
'sup3': 179,
|
|
'acute': 180,
|
|
'micro': 181,
|
|
'para': 182,
|
|
'middot': 183,
|
|
'cedil': 184,
|
|
'ordm': 186,
|
|
'raquo': 187,
|
|
'frac14': 188,
|
|
'frac12': 189,
|
|
'frac34': 190,
|
|
'iquest': 191,
|
|
'times': 215,
|
|
'divide': 247,
|
|
'OElig': 338,
|
|
'oelig': 339,
|
|
'Scaron': 352,
|
|
'scaron': 353,
|
|
'Yuml': 376,
|
|
'fnof': 402,
|
|
'circ': 710,
|
|
'tilde': 732,
|
|
'Alpha': 913,
|
|
'Beta': 914,
|
|
'Gamma': 915,
|
|
'Delta': 916,
|
|
'Epsilon': 917,
|
|
'Zeta': 918,
|
|
'Eta': 919,
|
|
'Theta': 920,
|
|
'Iota': 921,
|
|
'Kappa': 922,
|
|
'Lambda': 923,
|
|
'Mu': 924,
|
|
'Nu': 925,
|
|
'Xi': 926,
|
|
'Omicron': 927,
|
|
'Pi': 928,
|
|
'Rho': 929,
|
|
'Sigma': 931,
|
|
'Tau': 932,
|
|
'Upsilon': 933,
|
|
'Phi': 934,
|
|
'Chi': 935,
|
|
'Psi': 936,
|
|
'Omega': 937,
|
|
'alpha': 945,
|
|
'beta': 946,
|
|
'gamma': 947,
|
|
'delta': 948,
|
|
'epsilon': 949,
|
|
'zeta': 950,
|
|
'eta': 951,
|
|
'theta': 952,
|
|
'iota': 953,
|
|
'kappa': 954,
|
|
'lambda': 955,
|
|
'mu': 956,
|
|
'nu': 957,
|
|
'xi': 958,
|
|
'omicron': 959,
|
|
'pi': 960,
|
|
'rho': 961,
|
|
'sigmaf': 962,
|
|
'sigma': 963,
|
|
'tau': 964,
|
|
'upsilon': 965,
|
|
'phi': 966,
|
|
'chi': 967,
|
|
'psi': 968,
|
|
'omega': 969,
|
|
'thetasym': 977,
|
|
'upsih': 978,
|
|
'piv': 982,
|
|
'ensp': 8194,
|
|
'emsp': 8195,
|
|
'thinsp': 8201,
|
|
'zwnj': 8204,
|
|
'zwj': 8205,
|
|
'lrm': 8206,
|
|
'rlm': 8207,
|
|
'ndash': 8211,
|
|
'mdash': 8212,
|
|
'lsquo': 8216,
|
|
'rsquo': 8217,
|
|
'sbquo': 8218,
|
|
'ldquo': 8220,
|
|
'rdquo': 8221,
|
|
'bdquo': 8222,
|
|
'dagger': 8224,
|
|
'Dagger': 8225,
|
|
'bull': 8226,
|
|
'hellip': 8230,
|
|
'permil': 8240,
|
|
'prime': 8242,
|
|
'Prime': 8243,
|
|
'lsaquo': 8249,
|
|
'rsaquo': 8250,
|
|
'oline': 8254,
|
|
'frasl': 8260,
|
|
'euro': 8364,
|
|
'image': 8465,
|
|
'weierp': 8472,
|
|
'real': 8476,
|
|
'trade': 8482,
|
|
'alefsym': 8501,
|
|
'larr': 8592,
|
|
'uarr': 8593,
|
|
'rarr': 8594,
|
|
'darr': 8595,
|
|
'harr': 8596,
|
|
'crarr': 8629,
|
|
'lArr': 8656,
|
|
'uArr': 8657,
|
|
'rArr': 8658,
|
|
'dArr': 8659,
|
|
'hArr': 8660,
|
|
'forall': 8704,
|
|
'part': 8706,
|
|
'exist': 8707,
|
|
'empty': 8709,
|
|
'nabla': 8711,
|
|
'isin': 8712,
|
|
'notin': 8713,
|
|
'ni': 8715,
|
|
'prod': 8719,
|
|
'sum': 8721,
|
|
'minus': 8722,
|
|
'lowast': 8727,
|
|
'radic': 8730,
|
|
'prop': 8733,
|
|
'infin': 8734,
|
|
'ang': 8736,
|
|
'and': 8743,
|
|
'or': 8744,
|
|
'cap': 8745,
|
|
'cup': 8746,
|
|
'int': 8747,
|
|
'there4': 8756,
|
|
'sim': 8764,
|
|
'cong': 8773,
|
|
'asymp': 8776,
|
|
'ne': 8800,
|
|
'equiv': 8801,
|
|
'le': 8804,
|
|
'ge': 8805,
|
|
'sub': 8834,
|
|
'sup': 8835,
|
|
'nsub': 8836,
|
|
'sube': 8838,
|
|
'supe': 8839,
|
|
'oplus': 8853,
|
|
'otimes': 8855,
|
|
'perp': 8869,
|
|
'sdot': 8901,
|
|
'lceil': 8968,
|
|
'rceil': 8969,
|
|
'lfloor': 8970,
|
|
'rfloor': 8971,
|
|
'lang': 9001,
|
|
'rang': 9002,
|
|
'loz': 9674,
|
|
'spades': 9824,
|
|
'clubs': 9827,
|
|
'hearts': 9829,
|
|
'diams': 9830
|
|
}
|
|
|
|
Object.keys(sax.ENTITIES).forEach(function (key) {
|
|
var e = sax.ENTITIES[key]
|
|
var s = typeof e === 'number' ? String.fromCharCode(e) : e
|
|
sax.ENTITIES[key] = s
|
|
})
|
|
|
|
for (var s in sax.STATE) {
|
|
sax.STATE[sax.STATE[s]] = s
|
|
}
|
|
|
|
// shorthand
|
|
S = sax.STATE
|
|
|
|
function emit (parser, event, data) {
|
|
parser[event] && parser[event](data)
|
|
}
|
|
|
|
function emitNode (parser, nodeType, data) {
|
|
if (parser.textNode) closeText(parser)
|
|
emit(parser, nodeType, data)
|
|
}
|
|
|
|
function closeText (parser) {
|
|
parser.textNode = textopts(parser.opt, parser.textNode)
|
|
if (parser.textNode) emit(parser, 'ontext', parser.textNode)
|
|
parser.textNode = ''
|
|
}
|
|
|
|
function textopts (opt, text) {
|
|
if (opt.trim) text = text.trim()
|
|
if (opt.normalize) text = text.replace(/\s+/g, ' ')
|
|
return text
|
|
}
|
|
|
|
function error (parser, er) {
|
|
closeText(parser)
|
|
if (parser.trackPosition) {
|
|
er += '\nLine: ' + parser.line +
|
|
'\nColumn: ' + parser.column +
|
|
'\nChar: ' + parser.c
|
|
}
|
|
er = new Error(er)
|
|
parser.error = er
|
|
emit(parser, 'onerror', er)
|
|
return parser
|
|
}
|
|
|
|
function end (parser) {
|
|
if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')
|
|
if ((parser.state !== S.BEGIN) &&
|
|
(parser.state !== S.BEGIN_WHITESPACE) &&
|
|
(parser.state !== S.TEXT)) {
|
|
error(parser, 'Unexpected end')
|
|
}
|
|
closeText(parser)
|
|
parser.c = ''
|
|
parser.closed = true
|
|
emit(parser, 'onend')
|
|
SAXParser.call(parser, parser.strict, parser.opt)
|
|
return parser
|
|
}
|
|
|
|
function strictFail (parser, message) {
|
|
if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {
|
|
throw new Error('bad call to strictFail')
|
|
}
|
|
if (parser.strict) {
|
|
error(parser, message)
|
|
}
|
|
}
|
|
|
|
function newTag (parser) {
|
|
if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
var tag = parser.tag = { name: parser.tagName, attributes: {} }
|
|
|
|
// will be overridden if tag contails an xmlns="foo" or xmlns:foo="bar"
|
|
if (parser.opt.xmlns) {
|
|
tag.ns = parent.ns
|
|
}
|
|
parser.attribList.length = 0
|
|
emitNode(parser, 'onopentagstart', tag)
|
|
}
|
|
|
|
function qname (name, attribute) {
|
|
var i = name.indexOf(':')
|
|
var qualName = i < 0 ? [ '', name ] : name.split(':')
|
|
var prefix = qualName[0]
|
|
var local = qualName[1]
|
|
|
|
// <x "xmlns"="http://foo">
|
|
if (attribute && name === 'xmlns') {
|
|
prefix = 'xmlns'
|
|
local = ''
|
|
}
|
|
|
|
return { prefix: prefix, local: local }
|
|
}
|
|
|
|
function attrib (parser) {
|
|
if (!parser.strict) {
|
|
parser.attribName = parser.attribName[parser.looseCase]()
|
|
}
|
|
|
|
if (parser.attribList.indexOf(parser.attribName) !== -1 ||
|
|
parser.tag.attributes.hasOwnProperty(parser.attribName)) {
|
|
parser.attribName = parser.attribValue = ''
|
|
return
|
|
}
|
|
|
|
if (parser.opt.xmlns) {
|
|
var qn = qname(parser.attribName, true)
|
|
var prefix = qn.prefix
|
|
var local = qn.local
|
|
|
|
if (prefix === 'xmlns') {
|
|
// namespace binding attribute. push the binding into scope
|
|
if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {
|
|
strictFail(parser,
|
|
'xml: prefix must be bound to ' + XML_NAMESPACE + '\n' +
|
|
'Actual: ' + parser.attribValue)
|
|
} else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {
|
|
strictFail(parser,
|
|
'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\n' +
|
|
'Actual: ' + parser.attribValue)
|
|
} else {
|
|
var tag = parser.tag
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (tag.ns === parent.ns) {
|
|
tag.ns = Object.create(parent.ns)
|
|
}
|
|
tag.ns[local] = parser.attribValue
|
|
}
|
|
}
|
|
|
|
// defer onattribute events until all attributes have been seen
|
|
// so any new bindings can take effect. preserve attribute order
|
|
// so deferred events can be emitted in document order
|
|
parser.attribList.push([parser.attribName, parser.attribValue])
|
|
} else {
|
|
// in non-xmlns mode, we can emit the event right away
|
|
parser.tag.attributes[parser.attribName] = parser.attribValue
|
|
emitNode(parser, 'onattribute', {
|
|
name: parser.attribName,
|
|
value: parser.attribValue
|
|
})
|
|
}
|
|
|
|
parser.attribName = parser.attribValue = ''
|
|
}
|
|
|
|
function openTag (parser, selfClosing) {
|
|
if (parser.opt.xmlns) {
|
|
// emit namespace binding events
|
|
var tag = parser.tag
|
|
|
|
// add namespace info to tag
|
|
var qn = qname(parser.tagName)
|
|
tag.prefix = qn.prefix
|
|
tag.local = qn.local
|
|
tag.uri = tag.ns[qn.prefix] || ''
|
|
|
|
if (tag.prefix && !tag.uri) {
|
|
strictFail(parser, 'Unbound namespace prefix: ' +
|
|
JSON.stringify(parser.tagName))
|
|
tag.uri = qn.prefix
|
|
}
|
|
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (tag.ns && parent.ns !== tag.ns) {
|
|
Object.keys(tag.ns).forEach(function (p) {
|
|
emitNode(parser, 'onopennamespace', {
|
|
prefix: p,
|
|
uri: tag.ns[p]
|
|
})
|
|
})
|
|
}
|
|
|
|
// handle deferred onattribute events
|
|
// Note: do not apply default ns to attributes:
|
|
// http://www.w3.org/TR/REC-xml-names/#defaulting
|
|
for (var i = 0, l = parser.attribList.length; i < l; i++) {
|
|
var nv = parser.attribList[i]
|
|
var name = nv[0]
|
|
var value = nv[1]
|
|
var qualName = qname(name, true)
|
|
var prefix = qualName.prefix
|
|
var local = qualName.local
|
|
var uri = prefix === '' ? '' : (tag.ns[prefix] || '')
|
|
var a = {
|
|
name: name,
|
|
value: value,
|
|
prefix: prefix,
|
|
local: local,
|
|
uri: uri
|
|
}
|
|
|
|
// if there's any attributes with an undefined namespace,
|
|
// then fail on them now.
|
|
if (prefix && prefix !== 'xmlns' && !uri) {
|
|
strictFail(parser, 'Unbound namespace prefix: ' +
|
|
JSON.stringify(prefix))
|
|
a.uri = prefix
|
|
}
|
|
parser.tag.attributes[name] = a
|
|
emitNode(parser, 'onattribute', a)
|
|
}
|
|
parser.attribList.length = 0
|
|
}
|
|
|
|
parser.tag.isSelfClosing = !!selfClosing
|
|
|
|
// process the tag
|
|
parser.sawRoot = true
|
|
parser.tags.push(parser.tag)
|
|
emitNode(parser, 'onopentag', parser.tag)
|
|
if (!selfClosing) {
|
|
// special case for <script> in non-strict mode.
|
|
if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
parser.state = S.TEXT
|
|
}
|
|
parser.tag = null
|
|
parser.tagName = ''
|
|
}
|
|
parser.attribName = parser.attribValue = ''
|
|
parser.attribList.length = 0
|
|
}
|
|
|
|
function closeTag (parser) {
|
|
if (!parser.tagName) {
|
|
strictFail(parser, 'Weird empty close tag.')
|
|
parser.textNode += '</>'
|
|
parser.state = S.TEXT
|
|
return
|
|
}
|
|
|
|
if (parser.script) {
|
|
if (parser.tagName !== 'script') {
|
|
parser.script += '</' + parser.tagName + '>'
|
|
parser.tagName = ''
|
|
parser.state = S.SCRIPT
|
|
return
|
|
}
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
}
|
|
|
|
// first make sure that the closing tag actually exists.
|
|
// <a><b></c></b></a> will close everything, otherwise.
|
|
var t = parser.tags.length
|
|
var tagName = parser.tagName
|
|
if (!parser.strict) {
|
|
tagName = tagName[parser.looseCase]()
|
|
}
|
|
var closeTo = tagName
|
|
while (t--) {
|
|
var close = parser.tags[t]
|
|
if (close.name !== closeTo) {
|
|
// fail the first time in strict mode
|
|
strictFail(parser, 'Unexpected close tag')
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
// didn't find it. we already failed for strict, so just abort.
|
|
if (t < 0) {
|
|
strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)
|
|
parser.textNode += '</' + parser.tagName + '>'
|
|
parser.state = S.TEXT
|
|
return
|
|
}
|
|
parser.tagName = tagName
|
|
var s = parser.tags.length
|
|
while (s-- > t) {
|
|
var tag = parser.tag = parser.tags.pop()
|
|
parser.tagName = parser.tag.name
|
|
emitNode(parser, 'onclosetag', parser.tagName)
|
|
|
|
var x = {}
|
|
for (var i in tag.ns) {
|
|
x[i] = tag.ns[i]
|
|
}
|
|
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (parser.opt.xmlns && tag.ns !== parent.ns) {
|
|
// remove namespace bindings introduced by tag
|
|
Object.keys(tag.ns).forEach(function (p) {
|
|
var n = tag.ns[p]
|
|
emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })
|
|
})
|
|
}
|
|
}
|
|
if (t === 0) parser.closedRoot = true
|
|
parser.tagName = parser.attribValue = parser.attribName = ''
|
|
parser.attribList.length = 0
|
|
parser.state = S.TEXT
|
|
}
|
|
|
|
function parseEntity (parser) {
|
|
var entity = parser.entity
|
|
var entityLC = entity.toLowerCase()
|
|
var num
|
|
var numStr = ''
|
|
|
|
if (parser.ENTITIES[entity]) {
|
|
return parser.ENTITIES[entity]
|
|
}
|
|
if (parser.ENTITIES[entityLC]) {
|
|
return parser.ENTITIES[entityLC]
|
|
}
|
|
entity = entityLC
|
|
if (entity.charAt(0) === '#') {
|
|
if (entity.charAt(1) === 'x') {
|
|
entity = entity.slice(2)
|
|
num = parseInt(entity, 16)
|
|
numStr = num.toString(16)
|
|
} else {
|
|
entity = entity.slice(1)
|
|
num = parseInt(entity, 10)
|
|
numStr = num.toString(10)
|
|
}
|
|
}
|
|
entity = entity.replace(/^0+/, '')
|
|
if (isNaN(num) || numStr.toLowerCase() !== entity) {
|
|
strictFail(parser, 'Invalid character entity')
|
|
return '&' + parser.entity + ';'
|
|
}
|
|
|
|
return String.fromCodePoint(num)
|
|
}
|
|
|
|
function beginWhiteSpace (parser, c) {
|
|
if (c === '<') {
|
|
parser.state = S.OPEN_WAKA
|
|
parser.startTagPosition = parser.position
|
|
} else if (!isWhitespace(c)) {
|
|
// have to process this as a text node.
|
|
// weird, but happens.
|
|
strictFail(parser, 'Non-whitespace before first tag.')
|
|
parser.textNode = c
|
|
parser.state = S.TEXT
|
|
}
|
|
}
|
|
|
|
function charAt (chunk, i) {
|
|
var result = ''
|
|
if (i < chunk.length) {
|
|
result = chunk.charAt(i)
|
|
}
|
|
return result
|
|
}
|
|
|
|
function write (chunk) {
|
|
var parser = this
|
|
if (this.error) {
|
|
throw this.error
|
|
}
|
|
if (parser.closed) {
|
|
return error(parser,
|
|
'Cannot write after close. Assign an onready handler.')
|
|
}
|
|
if (chunk === null) {
|
|
return end(parser)
|
|
}
|
|
if (typeof chunk === 'object') {
|
|
chunk = chunk.toString()
|
|
}
|
|
var i = 0
|
|
var c = ''
|
|
while (true) {
|
|
c = charAt(chunk, i++)
|
|
parser.c = c
|
|
|
|
if (!c) {
|
|
break
|
|
}
|
|
|
|
if (parser.trackPosition) {
|
|
parser.position++
|
|
if (c === '\n') {
|
|
parser.line++
|
|
parser.column = 0
|
|
} else {
|
|
parser.column++
|
|
}
|
|
}
|
|
|
|
switch (parser.state) {
|
|
case S.BEGIN:
|
|
parser.state = S.BEGIN_WHITESPACE
|
|
if (c === '\uFEFF') {
|
|
continue
|
|
}
|
|
beginWhiteSpace(parser, c)
|
|
continue
|
|
|
|
case S.BEGIN_WHITESPACE:
|
|
beginWhiteSpace(parser, c)
|
|
continue
|
|
|
|
case S.TEXT:
|
|
if (parser.sawRoot && !parser.closedRoot) {
|
|
var starti = i - 1
|
|
while (c && c !== '<' && c !== '&') {
|
|
c = charAt(chunk, i++)
|
|
if (c && parser.trackPosition) {
|
|
parser.position++
|
|
if (c === '\n') {
|
|
parser.line++
|
|
parser.column = 0
|
|
} else {
|
|
parser.column++
|
|
}
|
|
}
|
|
}
|
|
parser.textNode += chunk.substring(starti, i - 1)
|
|
}
|
|
if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
|
|
parser.state = S.OPEN_WAKA
|
|
parser.startTagPosition = parser.position
|
|
} else {
|
|
if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {
|
|
strictFail(parser, 'Text data outside of root node.')
|
|
}
|
|
if (c === '&') {
|
|
parser.state = S.TEXT_ENTITY
|
|
} else {
|
|
parser.textNode += c
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.SCRIPT:
|
|
// only non-strict
|
|
if (c === '<') {
|
|
parser.state = S.SCRIPT_ENDING
|
|
} else {
|
|
parser.script += c
|
|
}
|
|
continue
|
|
|
|
case S.SCRIPT_ENDING:
|
|
if (c === '/') {
|
|
parser.state = S.CLOSE_TAG
|
|
} else {
|
|
parser.script += '<' + c
|
|
parser.state = S.SCRIPT
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_WAKA:
|
|
// either a /, ?, !, or text is coming next.
|
|
if (c === '!') {
|
|
parser.state = S.SGML_DECL
|
|
parser.sgmlDecl = ''
|
|
} else if (isWhitespace(c)) {
|
|
// wait for it...
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.state = S.OPEN_TAG
|
|
parser.tagName = c
|
|
} else if (c === '/') {
|
|
parser.state = S.CLOSE_TAG
|
|
parser.tagName = ''
|
|
} else if (c === '?') {
|
|
parser.state = S.PROC_INST
|
|
parser.procInstName = parser.procInstBody = ''
|
|
} else {
|
|
strictFail(parser, 'Unencoded <')
|
|
// if there was some whitespace, then add that in.
|
|
if (parser.startTagPosition + 1 < parser.position) {
|
|
var pad = parser.position - parser.startTagPosition
|
|
c = new Array(pad).join(' ') + c
|
|
}
|
|
parser.textNode += '<' + c
|
|
parser.state = S.TEXT
|
|
}
|
|
continue
|
|
|
|
case S.SGML_DECL:
|
|
if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {
|
|
emitNode(parser, 'onopencdata')
|
|
parser.state = S.CDATA
|
|
parser.sgmlDecl = ''
|
|
parser.cdata = ''
|
|
} else if (parser.sgmlDecl + c === '--') {
|
|
parser.state = S.COMMENT
|
|
parser.comment = ''
|
|
parser.sgmlDecl = ''
|
|
} else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {
|
|
parser.state = S.DOCTYPE
|
|
if (parser.doctype || parser.sawRoot) {
|
|
strictFail(parser,
|
|
'Inappropriately located doctype declaration')
|
|
}
|
|
parser.doctype = ''
|
|
parser.sgmlDecl = ''
|
|
} else if (c === '>') {
|
|
emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)
|
|
parser.sgmlDecl = ''
|
|
parser.state = S.TEXT
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.SGML_DECL_QUOTED
|
|
parser.sgmlDecl += c
|
|
} else {
|
|
parser.sgmlDecl += c
|
|
}
|
|
continue
|
|
|
|
case S.SGML_DECL_QUOTED:
|
|
if (c === parser.q) {
|
|
parser.state = S.SGML_DECL
|
|
parser.q = ''
|
|
}
|
|
parser.sgmlDecl += c
|
|
continue
|
|
|
|
case S.DOCTYPE:
|
|
if (c === '>') {
|
|
parser.state = S.TEXT
|
|
emitNode(parser, 'ondoctype', parser.doctype)
|
|
parser.doctype = true // just remember that we saw it.
|
|
} else {
|
|
parser.doctype += c
|
|
if (c === '[') {
|
|
parser.state = S.DOCTYPE_DTD
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.DOCTYPE_QUOTED
|
|
parser.q = c
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_QUOTED:
|
|
parser.doctype += c
|
|
if (c === parser.q) {
|
|
parser.q = ''
|
|
parser.state = S.DOCTYPE
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_DTD:
|
|
parser.doctype += c
|
|
if (c === ']') {
|
|
parser.state = S.DOCTYPE
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.DOCTYPE_DTD_QUOTED
|
|
parser.q = c
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_DTD_QUOTED:
|
|
parser.doctype += c
|
|
if (c === parser.q) {
|
|
parser.state = S.DOCTYPE_DTD
|
|
parser.q = ''
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT:
|
|
if (c === '-') {
|
|
parser.state = S.COMMENT_ENDING
|
|
} else {
|
|
parser.comment += c
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT_ENDING:
|
|
if (c === '-') {
|
|
parser.state = S.COMMENT_ENDED
|
|
parser.comment = textopts(parser.opt, parser.comment)
|
|
if (parser.comment) {
|
|
emitNode(parser, 'oncomment', parser.comment)
|
|
}
|
|
parser.comment = ''
|
|
} else {
|
|
parser.comment += '-' + c
|
|
parser.state = S.COMMENT
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT_ENDED:
|
|
if (c !== '>') {
|
|
strictFail(parser, 'Malformed comment')
|
|
// allow <!-- blah -- bloo --> in non-strict mode,
|
|
// which is a comment of " blah -- bloo "
|
|
parser.comment += '--' + c
|
|
parser.state = S.COMMENT
|
|
} else {
|
|
parser.state = S.TEXT
|
|
}
|
|
continue
|
|
|
|
case S.CDATA:
|
|
if (c === ']') {
|
|
parser.state = S.CDATA_ENDING
|
|
} else {
|
|
parser.cdata += c
|
|
}
|
|
continue
|
|
|
|
case S.CDATA_ENDING:
|
|
if (c === ']') {
|
|
parser.state = S.CDATA_ENDING_2
|
|
} else {
|
|
parser.cdata += ']' + c
|
|
parser.state = S.CDATA
|
|
}
|
|
continue
|
|
|
|
case S.CDATA_ENDING_2:
|
|
if (c === '>') {
|
|
if (parser.cdata) {
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
}
|
|
emitNode(parser, 'onclosecdata')
|
|
parser.cdata = ''
|
|
parser.state = S.TEXT
|
|
} else if (c === ']') {
|
|
parser.cdata += ']'
|
|
} else {
|
|
parser.cdata += ']]' + c
|
|
parser.state = S.CDATA
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST:
|
|
if (c === '?') {
|
|
parser.state = S.PROC_INST_ENDING
|
|
} else if (isWhitespace(c)) {
|
|
parser.state = S.PROC_INST_BODY
|
|
} else {
|
|
parser.procInstName += c
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST_BODY:
|
|
if (!parser.procInstBody && isWhitespace(c)) {
|
|
continue
|
|
} else if (c === '?') {
|
|
parser.state = S.PROC_INST_ENDING
|
|
} else {
|
|
parser.procInstBody += c
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST_ENDING:
|
|
if (c === '>') {
|
|
emitNode(parser, 'onprocessinginstruction', {
|
|
name: parser.procInstName,
|
|
body: parser.procInstBody
|
|
})
|
|
parser.procInstName = parser.procInstBody = ''
|
|
parser.state = S.TEXT
|
|
} else {
|
|
parser.procInstBody += '?' + c
|
|
parser.state = S.PROC_INST_BODY
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_TAG:
|
|
if (isMatch(nameBody, c)) {
|
|
parser.tagName += c
|
|
} else {
|
|
newTag(parser)
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else {
|
|
if (!isWhitespace(c)) {
|
|
strictFail(parser, 'Invalid character in tag name')
|
|
}
|
|
parser.state = S.ATTRIB
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_TAG_SLASH:
|
|
if (c === '>') {
|
|
openTag(parser, true)
|
|
closeTag(parser)
|
|
} else {
|
|
strictFail(parser, 'Forward-slash in opening tag not followed by >')
|
|
parser.state = S.ATTRIB
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB:
|
|
// haven't read the attribute name yet.
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.attribName = c
|
|
parser.attribValue = ''
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_NAME:
|
|
if (c === '=') {
|
|
parser.state = S.ATTRIB_VALUE
|
|
} else if (c === '>') {
|
|
strictFail(parser, 'Attribute without value')
|
|
parser.attribValue = parser.attribName
|
|
attrib(parser)
|
|
openTag(parser)
|
|
} else if (isWhitespace(c)) {
|
|
parser.state = S.ATTRIB_NAME_SAW_WHITE
|
|
} else if (isMatch(nameBody, c)) {
|
|
parser.attribName += c
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_NAME_SAW_WHITE:
|
|
if (c === '=') {
|
|
parser.state = S.ATTRIB_VALUE
|
|
} else if (isWhitespace(c)) {
|
|
continue
|
|
} else {
|
|
strictFail(parser, 'Attribute without value')
|
|
parser.tag.attributes[parser.attribName] = ''
|
|
parser.attribValue = ''
|
|
emitNode(parser, 'onattribute', {
|
|
name: parser.attribName,
|
|
value: ''
|
|
})
|
|
parser.attribName = ''
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.attribName = c
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
parser.state = S.ATTRIB
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE:
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (isQuote(c)) {
|
|
parser.q = c
|
|
parser.state = S.ATTRIB_VALUE_QUOTED
|
|
} else {
|
|
strictFail(parser, 'Unquoted attribute value')
|
|
parser.state = S.ATTRIB_VALUE_UNQUOTED
|
|
parser.attribValue = c
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_QUOTED:
|
|
if (c !== parser.q) {
|
|
if (c === '&') {
|
|
parser.state = S.ATTRIB_VALUE_ENTITY_Q
|
|
} else {
|
|
parser.attribValue += c
|
|
}
|
|
continue
|
|
}
|
|
attrib(parser)
|
|
parser.q = ''
|
|
parser.state = S.ATTRIB_VALUE_CLOSED
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_CLOSED:
|
|
if (isWhitespace(c)) {
|
|
parser.state = S.ATTRIB
|
|
} else if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else if (isMatch(nameStart, c)) {
|
|
strictFail(parser, 'No whitespace between attributes')
|
|
parser.attribName = c
|
|
parser.attribValue = ''
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_UNQUOTED:
|
|
if (!isAttribEnd(c)) {
|
|
if (c === '&') {
|
|
parser.state = S.ATTRIB_VALUE_ENTITY_U
|
|
} else {
|
|
parser.attribValue += c
|
|
}
|
|
continue
|
|
}
|
|
attrib(parser)
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else {
|
|
parser.state = S.ATTRIB
|
|
}
|
|
continue
|
|
|
|
case S.CLOSE_TAG:
|
|
if (!parser.tagName) {
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (notMatch(nameStart, c)) {
|
|
if (parser.script) {
|
|
parser.script += '</' + c
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
strictFail(parser, 'Invalid tagname in closing tag.')
|
|
}
|
|
} else {
|
|
parser.tagName = c
|
|
}
|
|
} else if (c === '>') {
|
|
closeTag(parser)
|
|
} else if (isMatch(nameBody, c)) {
|
|
parser.tagName += c
|
|
} else if (parser.script) {
|
|
parser.script += '</' + parser.tagName
|
|
parser.tagName = ''
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
if (!isWhitespace(c)) {
|
|
strictFail(parser, 'Invalid tagname in closing tag')
|
|
}
|
|
parser.state = S.CLOSE_TAG_SAW_WHITE
|
|
}
|
|
continue
|
|
|
|
case S.CLOSE_TAG_SAW_WHITE:
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
}
|
|
if (c === '>') {
|
|
closeTag(parser)
|
|
} else {
|
|
strictFail(parser, 'Invalid characters in closing tag')
|
|
}
|
|
continue
|
|
|
|
case S.TEXT_ENTITY:
|
|
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
case S.ATTRIB_VALUE_ENTITY_U:
|
|
var returnState
|
|
var buffer
|
|
switch (parser.state) {
|
|
case S.TEXT_ENTITY:
|
|
returnState = S.TEXT
|
|
buffer = 'textNode'
|
|
break
|
|
|
|
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
returnState = S.ATTRIB_VALUE_QUOTED
|
|
buffer = 'attribValue'
|
|
break
|
|
|
|
case S.ATTRIB_VALUE_ENTITY_U:
|
|
returnState = S.ATTRIB_VALUE_UNQUOTED
|
|
buffer = 'attribValue'
|
|
break
|
|
}
|
|
|
|
if (c === ';') {
|
|
parser[buffer] += parseEntity(parser)
|
|
parser.entity = ''
|
|
parser.state = returnState
|
|
} else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {
|
|
parser.entity += c
|
|
} else {
|
|
strictFail(parser, 'Invalid character in entity name')
|
|
parser[buffer] += '&' + parser.entity + c
|
|
parser.entity = ''
|
|
parser.state = returnState
|
|
}
|
|
|
|
continue
|
|
|
|
default:
|
|
throw new Error(parser, 'Unknown state: ' + parser.state)
|
|
}
|
|
} // while
|
|
|
|
if (parser.position >= parser.bufferCheckPosition) {
|
|
checkBufferLength(parser)
|
|
}
|
|
return parser
|
|
}
|
|
|
|
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
|
|
/* istanbul ignore next */
|
|
if (!String.fromCodePoint) {
|
|
(function () {
|
|
var stringFromCharCode = String.fromCharCode
|
|
var floor = Math.floor
|
|
var fromCodePoint = function () {
|
|
var MAX_SIZE = 0x4000
|
|
var codeUnits = []
|
|
var highSurrogate
|
|
var lowSurrogate
|
|
var index = -1
|
|
var length = arguments.length
|
|
if (!length) {
|
|
return ''
|
|
}
|
|
var result = ''
|
|
while (++index < length) {
|
|
var codePoint = Number(arguments[index])
|
|
if (
|
|
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
|
|
codePoint < 0 || // not a valid Unicode code point
|
|
codePoint > 0x10FFFF || // not a valid Unicode code point
|
|
floor(codePoint) !== codePoint // not an integer
|
|
) {
|
|
throw RangeError('Invalid code point: ' + codePoint)
|
|
}
|
|
if (codePoint <= 0xFFFF) { // BMP code point
|
|
codeUnits.push(codePoint)
|
|
} else { // Astral code point; split in surrogate halves
|
|
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
codePoint -= 0x10000
|
|
highSurrogate = (codePoint >> 10) + 0xD800
|
|
lowSurrogate = (codePoint % 0x400) + 0xDC00
|
|
codeUnits.push(highSurrogate, lowSurrogate)
|
|
}
|
|
if (index + 1 === length || codeUnits.length > MAX_SIZE) {
|
|
result += stringFromCharCode.apply(null, codeUnits)
|
|
codeUnits.length = 0
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
/* istanbul ignore next */
|
|
if (Object.defineProperty) {
|
|
Object.defineProperty(String, 'fromCodePoint', {
|
|
value: fromCodePoint,
|
|
configurable: true,
|
|
writable: true
|
|
})
|
|
} else {
|
|
String.fromCodePoint = fromCodePoint
|
|
}
|
|
}())
|
|
}
|
|
})( false ? 0 : exports)
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1861:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
/*!
|
|
* to-regex-range <https://github.com/micromatch/to-regex-range>
|
|
*
|
|
* Copyright (c) 2015-present, Jon Schlinkert.
|
|
* Released under the MIT License.
|
|
*/
|
|
|
|
|
|
|
|
const isNumber = __nccwpck_require__(5680);
|
|
|
|
const toRegexRange = (min, max, options) => {
|
|
if (isNumber(min) === false) {
|
|
throw new TypeError('toRegexRange: expected the first argument to be a number');
|
|
}
|
|
|
|
if (max === void 0 || min === max) {
|
|
return String(min);
|
|
}
|
|
|
|
if (isNumber(max) === false) {
|
|
throw new TypeError('toRegexRange: expected the second argument to be a number.');
|
|
}
|
|
|
|
let opts = { relaxZeros: true, ...options };
|
|
if (typeof opts.strictZeros === 'boolean') {
|
|
opts.relaxZeros = opts.strictZeros === false;
|
|
}
|
|
|
|
let relax = String(opts.relaxZeros);
|
|
let shorthand = String(opts.shorthand);
|
|
let capture = String(opts.capture);
|
|
let wrap = String(opts.wrap);
|
|
let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
|
|
|
|
if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
|
|
return toRegexRange.cache[cacheKey].result;
|
|
}
|
|
|
|
let a = Math.min(min, max);
|
|
let b = Math.max(min, max);
|
|
|
|
if (Math.abs(a - b) === 1) {
|
|
let result = min + '|' + max;
|
|
if (opts.capture) {
|
|
return `(${result})`;
|
|
}
|
|
if (opts.wrap === false) {
|
|
return result;
|
|
}
|
|
return `(?:${result})`;
|
|
}
|
|
|
|
let isPadded = hasPadding(min) || hasPadding(max);
|
|
let state = { min, max, a, b };
|
|
let positives = [];
|
|
let negatives = [];
|
|
|
|
if (isPadded) {
|
|
state.isPadded = isPadded;
|
|
state.maxLen = String(state.max).length;
|
|
}
|
|
|
|
if (a < 0) {
|
|
let newMin = b < 0 ? Math.abs(b) : 1;
|
|
negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
|
|
a = state.a = 0;
|
|
}
|
|
|
|
if (b >= 0) {
|
|
positives = splitToPatterns(a, b, state, opts);
|
|
}
|
|
|
|
state.negatives = negatives;
|
|
state.positives = positives;
|
|
state.result = collatePatterns(negatives, positives, opts);
|
|
|
|
if (opts.capture === true) {
|
|
state.result = `(${state.result})`;
|
|
} else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
|
|
state.result = `(?:${state.result})`;
|
|
}
|
|
|
|
toRegexRange.cache[cacheKey] = state;
|
|
return state.result;
|
|
};
|
|
|
|
function collatePatterns(neg, pos, options) {
|
|
let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
|
|
let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
|
|
let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
|
|
let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
|
|
return subpatterns.join('|');
|
|
}
|
|
|
|
function splitToRanges(min, max) {
|
|
let nines = 1;
|
|
let zeros = 1;
|
|
|
|
let stop = countNines(min, nines);
|
|
let stops = new Set([max]);
|
|
|
|
while (min <= stop && stop <= max) {
|
|
stops.add(stop);
|
|
nines += 1;
|
|
stop = countNines(min, nines);
|
|
}
|
|
|
|
stop = countZeros(max + 1, zeros) - 1;
|
|
|
|
while (min < stop && stop <= max) {
|
|
stops.add(stop);
|
|
zeros += 1;
|
|
stop = countZeros(max + 1, zeros) - 1;
|
|
}
|
|
|
|
stops = [...stops];
|
|
stops.sort(compare);
|
|
return stops;
|
|
}
|
|
|
|
/**
|
|
* Convert a range to a regex pattern
|
|
* @param {Number} `start`
|
|
* @param {Number} `stop`
|
|
* @return {String}
|
|
*/
|
|
|
|
function rangeToPattern(start, stop, options) {
|
|
if (start === stop) {
|
|
return { pattern: start, count: [], digits: 0 };
|
|
}
|
|
|
|
let zipped = zip(start, stop);
|
|
let digits = zipped.length;
|
|
let pattern = '';
|
|
let count = 0;
|
|
|
|
for (let i = 0; i < digits; i++) {
|
|
let [startDigit, stopDigit] = zipped[i];
|
|
|
|
if (startDigit === stopDigit) {
|
|
pattern += startDigit;
|
|
|
|
} else if (startDigit !== '0' || stopDigit !== '9') {
|
|
pattern += toCharacterClass(startDigit, stopDigit, options);
|
|
|
|
} else {
|
|
count++;
|
|
}
|
|
}
|
|
|
|
if (count) {
|
|
pattern += options.shorthand === true ? '\\d' : '[0-9]';
|
|
}
|
|
|
|
return { pattern, count: [count], digits };
|
|
}
|
|
|
|
function splitToPatterns(min, max, tok, options) {
|
|
let ranges = splitToRanges(min, max);
|
|
let tokens = [];
|
|
let start = min;
|
|
let prev;
|
|
|
|
for (let i = 0; i < ranges.length; i++) {
|
|
let max = ranges[i];
|
|
let obj = rangeToPattern(String(start), String(max), options);
|
|
let zeros = '';
|
|
|
|
if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
|
|
if (prev.count.length > 1) {
|
|
prev.count.pop();
|
|
}
|
|
|
|
prev.count.push(obj.count[0]);
|
|
prev.string = prev.pattern + toQuantifier(prev.count);
|
|
start = max + 1;
|
|
continue;
|
|
}
|
|
|
|
if (tok.isPadded) {
|
|
zeros = padZeros(max, tok, options);
|
|
}
|
|
|
|
obj.string = zeros + obj.pattern + toQuantifier(obj.count);
|
|
tokens.push(obj);
|
|
start = max + 1;
|
|
prev = obj;
|
|
}
|
|
|
|
return tokens;
|
|
}
|
|
|
|
function filterPatterns(arr, comparison, prefix, intersection, options) {
|
|
let result = [];
|
|
|
|
for (let ele of arr) {
|
|
let { string } = ele;
|
|
|
|
// only push if _both_ are negative...
|
|
if (!intersection && !contains(comparison, 'string', string)) {
|
|
result.push(prefix + string);
|
|
}
|
|
|
|
// or _both_ are positive
|
|
if (intersection && contains(comparison, 'string', string)) {
|
|
result.push(prefix + string);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Zip strings
|
|
*/
|
|
|
|
function zip(a, b) {
|
|
let arr = [];
|
|
for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
|
|
return arr;
|
|
}
|
|
|
|
function compare(a, b) {
|
|
return a > b ? 1 : b > a ? -1 : 0;
|
|
}
|
|
|
|
function contains(arr, key, val) {
|
|
return arr.some(ele => ele[key] === val);
|
|
}
|
|
|
|
function countNines(min, len) {
|
|
return Number(String(min).slice(0, -len) + '9'.repeat(len));
|
|
}
|
|
|
|
function countZeros(integer, zeros) {
|
|
return integer - (integer % Math.pow(10, zeros));
|
|
}
|
|
|
|
function toQuantifier(digits) {
|
|
let [start = 0, stop = ''] = digits;
|
|
if (stop || start > 1) {
|
|
return `{${start + (stop ? ',' + stop : '')}}`;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
function toCharacterClass(a, b, options) {
|
|
return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
|
|
}
|
|
|
|
function hasPadding(str) {
|
|
return /^-?(0+)\d/.test(str);
|
|
}
|
|
|
|
function padZeros(value, tok, options) {
|
|
if (!tok.isPadded) {
|
|
return value;
|
|
}
|
|
|
|
let diff = Math.abs(tok.maxLen - String(value).length);
|
|
let relax = options.relaxZeros !== false;
|
|
|
|
switch (diff) {
|
|
case 0:
|
|
return '';
|
|
case 1:
|
|
return relax ? '0?' : '0';
|
|
case 2:
|
|
return relax ? '0{0,2}' : '00';
|
|
default: {
|
|
return relax ? `0{0,${diff}}` : `0{${diff}}`;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Cache
|
|
*/
|
|
|
|
toRegexRange.cache = {};
|
|
toRegexRange.clearCache = () => (toRegexRange.cache = {});
|
|
|
|
/**
|
|
* Expose `toRegexRange`
|
|
*/
|
|
|
|
module.exports = toRegexRange;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4256:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
var punycode = __nccwpck_require__(5477);
|
|
var mappingTable = __nccwpck_require__(2020);
|
|
|
|
var PROCESSING_OPTIONS = {
|
|
TRANSITIONAL: 0,
|
|
NONTRANSITIONAL: 1
|
|
};
|
|
|
|
function normalize(str) { // fix bug in v8
|
|
return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
|
|
}
|
|
|
|
function findStatus(val) {
|
|
var start = 0;
|
|
var end = mappingTable.length - 1;
|
|
|
|
while (start <= end) {
|
|
var mid = Math.floor((start + end) / 2);
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
|
|
function countSymbols(string) {
|
|
return string
|
|
// replace every surrogate pair with a BMP symbol
|
|
.replace(regexAstralSymbols, '_')
|
|
// then get the length
|
|
.length;
|
|
}
|
|
|
|
function mapChars(domain_name, useSTD3, processing_option) {
|
|
var hasError = false;
|
|
var processed = "";
|
|
|
|
var len = countSymbols(domain_name);
|
|
for (var i = 0; i < len; ++i) {
|
|
var codePoint = domain_name.codePointAt(i);
|
|
var status = findStatus(codePoint);
|
|
|
|
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;
|
|
}
|
|
|
|
processed += String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return {
|
|
string: processed,
|
|
error: hasError
|
|
};
|
|
}
|
|
|
|
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]/;
|
|
|
|
function validateLabel(label, processing_option) {
|
|
if (label.substr(0, 4) === "xn--") {
|
|
label = punycode.toUnicode(label);
|
|
processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;
|
|
}
|
|
|
|
var error = false;
|
|
|
|
if (normalize(label) !== label ||
|
|
(label[3] === "-" && label[4] === "-") ||
|
|
label[0] === "-" || label[label.length - 1] === "-" ||
|
|
label.indexOf(".") !== -1 ||
|
|
label.search(combiningMarksRegex) === 0) {
|
|
error = true;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
return {
|
|
label: label,
|
|
error: error
|
|
};
|
|
}
|
|
|
|
function processing(domain_name, useSTD3, processing_option) {
|
|
var result = mapChars(domain_name, useSTD3, processing_option);
|
|
result.string = normalize(result.string);
|
|
|
|
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
|
|
};
|
|
}
|
|
|
|
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;
|
|
}
|
|
});
|
|
|
|
if (verifyDnsLength) {
|
|
var total = labels.slice(0, labels.length - 1).join(".").length;
|
|
if (total.length > 253 || total.length === 0) {
|
|
result.error = true;
|
|
}
|
|
|
|
for (var i=0; i < labels.length; ++i) {
|
|
if (labels.length > 63 || labels.length === 0) {
|
|
result.error = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (result.error) return null;
|
|
return labels.join(".");
|
|
};
|
|
|
|
module.exports.toUnicode = function(domain_name, useSTD3) {
|
|
var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
|
|
|
|
return {
|
|
domain: result.string,
|
|
error: result.error
|
|
};
|
|
};
|
|
|
|
module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4294:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
module.exports = __nccwpck_require__(4219);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4219:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
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);
|
|
|
|
|
|
exports.httpOverHttp = httpOverHttp;
|
|
exports.httpsOverHttp = httpsOverHttp;
|
|
exports.httpOverHttps = httpOverHttps;
|
|
exports.httpsOverHttps = httpsOverHttps;
|
|
|
|
|
|
function httpOverHttp(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
return agent;
|
|
}
|
|
|
|
function httpsOverHttp(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
}
|
|
|
|
function httpOverHttps(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
return agent;
|
|
}
|
|
|
|
function httpsOverHttps(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
}
|
|
|
|
|
|
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 = [];
|
|
|
|
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);
|
|
|
|
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;
|
|
}
|
|
|
|
// 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);
|
|
|
|
function onFree() {
|
|
self.emit('free', socket, options);
|
|
}
|
|
|
|
function onCloseOrRemove(err) {
|
|
self.removeSocket(socket);
|
|
socket.removeListener('free', onFree);
|
|
socket.removeListener('close', onCloseOrRemove);
|
|
socket.removeListener('agentRemove', onCloseOrRemove);
|
|
}
|
|
});
|
|
};
|
|
|
|
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
|
|
var self = this;
|
|
var placeholder = {};
|
|
self.sockets.push(placeholder);
|
|
|
|
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');
|
|
}
|
|
|
|
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();
|
|
|
|
function onResponse(res) {
|
|
// Very hacky. This is necessary to avoid http-parser leaks.
|
|
res.upgrade = true;
|
|
}
|
|
|
|
function onUpgrade(res, socket, head) {
|
|
// Hacky.
|
|
process.nextTick(function() {
|
|
onConnect(res, socket, head);
|
|
});
|
|
}
|
|
|
|
function onConnect(res, socket, head) {
|
|
connectReq.removeAllListeners();
|
|
socket.removeAllListeners();
|
|
|
|
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);
|
|
}
|
|
|
|
function onError(cause) {
|
|
connectReq.removeAllListeners();
|
|
|
|
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);
|
|
}
|
|
};
|
|
|
|
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
|
|
var pos = this.sockets.indexOf(socket)
|
|
if (pos === -1) {
|
|
return;
|
|
}
|
|
this.sockets.splice(pos, 1);
|
|
|
|
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);
|
|
});
|
|
}
|
|
};
|
|
|
|
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
|
|
});
|
|
|
|
// 0 is dummy port for v0.6
|
|
var secureSocket = tls.connect(0, tlsOptions);
|
|
self.sockets[self.sockets.indexOf(socket)] = secureSocket;
|
|
cb(secureSocket);
|
|
});
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
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
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5030:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
|
function getUserAgent() {
|
|
if (typeof navigator === "object" && "userAgent" in navigator) {
|
|
return navigator.userAgent;
|
|
}
|
|
|
|
if (typeof process === "object" && "version" in process) {
|
|
return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
|
|
}
|
|
|
|
return "<environment undetectable>";
|
|
}
|
|
|
|
exports.getUserAgent = getUserAgent;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5840:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
Object.defineProperty(exports, "v1", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "v3", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v2.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "v4", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v3.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "v5", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v4.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "NIL", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _nil.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "version", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _version.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "validate", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _validate.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "stringify", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _stringify.default;
|
|
}
|
|
}));
|
|
Object.defineProperty(exports, "parse", ({
|
|
enumerable: true,
|
|
get: function () {
|
|
return _parse.default;
|
|
}
|
|
}));
|
|
|
|
var _v = _interopRequireDefault(__nccwpck_require__(8628));
|
|
|
|
var _v2 = _interopRequireDefault(__nccwpck_require__(6409));
|
|
|
|
var _v3 = _interopRequireDefault(__nccwpck_require__(5122));
|
|
|
|
var _v4 = _interopRequireDefault(__nccwpck_require__(9120));
|
|
|
|
var _nil = _interopRequireDefault(__nccwpck_require__(5332));
|
|
|
|
var _version = _interopRequireDefault(__nccwpck_require__(1595));
|
|
|
|
var _validate = _interopRequireDefault(__nccwpck_require__(6900));
|
|
|
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
|
|
|
var _parse = _interopRequireDefault(__nccwpck_require__(2746));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4569:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function md5(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === 'string') {
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
}
|
|
|
|
return _crypto.default.createHash('md5').update(bytes).digest();
|
|
}
|
|
|
|
var _default = md5;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5332:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
var _default = '00000000-0000-0000-0000-000000000000';
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2746:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__nccwpck_require__(6900));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function parse(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Invalid UUID');
|
|
}
|
|
|
|
let v;
|
|
const arr = new Uint8Array(16); // Parse ########-....-....-....-............
|
|
|
|
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
arr[1] = v >>> 16 & 0xff;
|
|
arr[2] = v >>> 8 & 0xff;
|
|
arr[3] = v & 0xff; // Parse ........-####-....-....-............
|
|
|
|
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
arr[5] = v & 0xff; // Parse ........-....-####-....-............
|
|
|
|
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
arr[7] = v & 0xff; // Parse ........-....-....-####-............
|
|
|
|
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
arr[9] = v & 0xff; // Parse ........-....-....-....-############
|
|
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
|
|
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
arr[11] = v / 0x100000000 & 0xff;
|
|
arr[12] = v >>> 24 & 0xff;
|
|
arr[13] = v >>> 16 & 0xff;
|
|
arr[14] = v >>> 8 & 0xff;
|
|
arr[15] = v & 0xff;
|
|
return arr;
|
|
}
|
|
|
|
var _default = parse;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 814:
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 807:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = rng;
|
|
|
|
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
|
|
|
|
let poolPtr = rnds8Pool.length;
|
|
|
|
function rng() {
|
|
if (poolPtr > rnds8Pool.length - 16) {
|
|
_crypto.default.randomFillSync(rnds8Pool);
|
|
|
|
poolPtr = 0;
|
|
}
|
|
|
|
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5274:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function sha1(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === 'string') {
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
}
|
|
|
|
return _crypto.default.createHash('sha1').update(bytes).digest();
|
|
}
|
|
|
|
var _default = sha1;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8950:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__nccwpck_require__(6900));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/**
|
|
* Convert array of 16 byte values to UUID string format of the form:
|
|
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
*/
|
|
const byteToHex = [];
|
|
|
|
for (let i = 0; i < 256; ++i) {
|
|
byteToHex.push((i + 0x100).toString(16).substr(1));
|
|
}
|
|
|
|
function stringify(arr, offset = 0) {
|
|
// Note: Be careful editing this code! It's been tuned for performance
|
|
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
|
|
// of the following:
|
|
// - One or more input array values don't map to a hex octet (leading to
|
|
// "undefined" in the uuid)
|
|
// - Invalid input values for the RFC `version` or `variant` fields
|
|
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Stringified UUID is invalid');
|
|
}
|
|
|
|
return uuid;
|
|
}
|
|
|
|
var _default = stringify;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8628:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _rng = _interopRequireDefault(__nccwpck_require__(807));
|
|
|
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
// **`v1()` - Generate time-based UUID**
|
|
//
|
|
// Inspired by https://github.com/LiosK/UUID.js
|
|
// and http://docs.python.org/library/uuid.html
|
|
let _nodeId;
|
|
|
|
let _clockseq; // Previous uuid creation time
|
|
|
|
|
|
let _lastMSecs = 0;
|
|
let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
|
|
|
|
function v1(options, buf, offset) {
|
|
let i = buf && offset || 0;
|
|
const b = buf || new Array(16);
|
|
options = options || {};
|
|
let node = options.node || _nodeId;
|
|
let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
|
|
// specified. We do this lazily to minimize issues related to insufficient
|
|
// system entropy. See #189
|
|
|
|
if (node == null || clockseq == null) {
|
|
const seedBytes = options.random || (options.rng || _rng.default)();
|
|
|
|
if (node == null) {
|
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
|
node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
}
|
|
|
|
if (clockseq == null) {
|
|
// Per 4.2.2, randomize (14 bit) clockseq
|
|
clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
}
|
|
} // UUID timestamps are 100 nano-second units since the Gregorian epoch,
|
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
|
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
|
|
|
|
let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
// cycle to simulate higher resolution clock
|
|
|
|
let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
|
|
|
|
const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
|
|
|
|
if (dt < 0 && options.clockseq === undefined) {
|
|
clockseq = clockseq + 1 & 0x3fff;
|
|
} // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
// time interval
|
|
|
|
|
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
nsecs = 0;
|
|
} // Per 4.2.1.2 Throw error if too many uuids are requested
|
|
|
|
|
|
if (nsecs >= 10000) {
|
|
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
}
|
|
|
|
_lastMSecs = msecs;
|
|
_lastNSecs = nsecs;
|
|
_clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
|
|
msecs += 12219292800000; // `time_low`
|
|
|
|
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
b[i++] = tl >>> 24 & 0xff;
|
|
b[i++] = tl >>> 16 & 0xff;
|
|
b[i++] = tl >>> 8 & 0xff;
|
|
b[i++] = tl & 0xff; // `time_mid`
|
|
|
|
const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
b[i++] = tmh >>> 8 & 0xff;
|
|
b[i++] = tmh & 0xff; // `time_high_and_version`
|
|
|
|
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
|
|
b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
|
|
b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
|
|
|
|
b[i++] = clockseq & 0xff; // `node`
|
|
|
|
for (let n = 0; n < 6; ++n) {
|
|
b[i + n] = node[n];
|
|
}
|
|
|
|
return buf || (0, _stringify.default)(b);
|
|
}
|
|
|
|
var _default = v1;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6409:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _v = _interopRequireDefault(__nccwpck_require__(5998));
|
|
|
|
var _md = _interopRequireDefault(__nccwpck_require__(4569));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const v3 = (0, _v.default)('v3', 0x30, _md.default);
|
|
var _default = v3;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5998:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = _default;
|
|
exports.URL = exports.DNS = void 0;
|
|
|
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
|
|
|
var _parse = _interopRequireDefault(__nccwpck_require__(2746));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function stringToBytes(str) {
|
|
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
|
|
const bytes = [];
|
|
|
|
for (let i = 0; i < str.length; ++i) {
|
|
bytes.push(str.charCodeAt(i));
|
|
}
|
|
|
|
return bytes;
|
|
}
|
|
|
|
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
exports.DNS = DNS;
|
|
const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
exports.URL = URL;
|
|
|
|
function _default(name, version, hashfunc) {
|
|
function generateUUID(value, namespace, buf, offset) {
|
|
if (typeof value === 'string') {
|
|
value = stringToBytes(value);
|
|
}
|
|
|
|
if (typeof namespace === 'string') {
|
|
namespace = (0, _parse.default)(namespace);
|
|
}
|
|
|
|
if (namespace.length !== 16) {
|
|
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
} // Compute hash of namespace and value, Per 4.3
|
|
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
// hashfunc([...namespace, ... value])`
|
|
|
|
|
|
let bytes = new Uint8Array(16 + value.length);
|
|
bytes.set(namespace);
|
|
bytes.set(value, namespace.length);
|
|
bytes = hashfunc(bytes);
|
|
bytes[6] = bytes[6] & 0x0f | version;
|
|
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
buf[offset + i] = bytes[i];
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
return (0, _stringify.default)(bytes);
|
|
} // Function#name is not settable on some platforms (#270)
|
|
|
|
|
|
try {
|
|
generateUUID.name = name; // eslint-disable-next-line no-empty
|
|
} catch (err) {} // For CommonJS default export support
|
|
|
|
|
|
generateUUID.DNS = DNS;
|
|
generateUUID.URL = URL;
|
|
return generateUUID;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5122:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _rng = _interopRequireDefault(__nccwpck_require__(807));
|
|
|
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function v4(options, buf, offset) {
|
|
options = options || {};
|
|
|
|
const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
|
|
|
|
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
buf[offset + i] = rnds[i];
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
return (0, _stringify.default)(rnds);
|
|
}
|
|
|
|
var _default = v4;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9120:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _v = _interopRequireDefault(__nccwpck_require__(5998));
|
|
|
|
var _sha = _interopRequireDefault(__nccwpck_require__(5274));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const v5 = (0, _v.default)('v5', 0x50, _sha.default);
|
|
var _default = v5;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6900:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _regex = _interopRequireDefault(__nccwpck_require__(814));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function validate(uuid) {
|
|
return typeof uuid === 'string' && _regex.default.test(uuid);
|
|
}
|
|
|
|
var _default = validate;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1595:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
value: true
|
|
}));
|
|
exports["default"] = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__nccwpck_require__(6900));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function version(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Invalid UUID');
|
|
}
|
|
|
|
return parseInt(uuid.substr(14, 1), 16);
|
|
}
|
|
|
|
var _default = version;
|
|
exports["default"] = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4886:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
var conversions = {};
|
|
module.exports = conversions;
|
|
|
|
function sign(x) {
|
|
return x < 0 ? -1 : 1;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
function createNumberConversion(bitLength, typeOpts) {
|
|
if (!typeOpts.unsigned) {
|
|
--bitLength;
|
|
}
|
|
const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
|
|
const upperBound = Math.pow(2, bitLength) - 1;
|
|
|
|
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);
|
|
|
|
return function(V, opts) {
|
|
if (!opts) opts = {};
|
|
|
|
let x = +V;
|
|
|
|
if (opts.enforceRange) {
|
|
if (!Number.isFinite(x)) {
|
|
throw new TypeError("Argument is not a finite number");
|
|
}
|
|
|
|
x = sign(x) * Math.floor(Math.abs(x));
|
|
if (x < lowerBound || x > upperBound) {
|
|
throw new TypeError("Argument is not in byte range");
|
|
}
|
|
|
|
return x;
|
|
}
|
|
|
|
if (!isNaN(x) && opts.clamp) {
|
|
x = evenRound(x);
|
|
|
|
if (x < lowerBound) x = lowerBound;
|
|
if (x > upperBound) x = upperBound;
|
|
return x;
|
|
}
|
|
|
|
if (!Number.isFinite(x) || x === 0) {
|
|
return 0;
|
|
}
|
|
|
|
x = sign(x) * Math.floor(Math.abs(x));
|
|
x = x % moduloVal;
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
return x;
|
|
}
|
|
}
|
|
|
|
conversions["void"] = function () {
|
|
return undefined;
|
|
};
|
|
|
|
conversions["boolean"] = function (val) {
|
|
return !!val;
|
|
};
|
|
|
|
conversions["byte"] = createNumberConversion(8, { unsigned: false });
|
|
conversions["octet"] = createNumberConversion(8, { unsigned: true });
|
|
|
|
conversions["short"] = createNumberConversion(16, { unsigned: false });
|
|
conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
|
|
|
|
conversions["long"] = createNumberConversion(32, { unsigned: false });
|
|
conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
|
|
|
|
conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
|
|
conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
|
|
|
|
conversions["double"] = function (V) {
|
|
const x = +V;
|
|
|
|
if (!Number.isFinite(x)) {
|
|
throw new TypeError("Argument is not a finite floating-point value");
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
conversions["unrestricted double"] = function (V) {
|
|
const x = +V;
|
|
|
|
if (isNaN(x)) {
|
|
throw new TypeError("Argument is NaN");
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
// not quite valid, but good enough for JS
|
|
conversions["float"] = conversions["double"];
|
|
conversions["unrestricted float"] = conversions["unrestricted double"];
|
|
|
|
conversions["DOMString"] = function (V, opts) {
|
|
if (!opts) opts = {};
|
|
|
|
if (opts.treatNullAsEmptyString && V === null) {
|
|
return "";
|
|
}
|
|
|
|
return String(V);
|
|
};
|
|
|
|
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");
|
|
}
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
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));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return U.join('');
|
|
};
|
|
|
|
conversions["Date"] = function (V, opts) {
|
|
if (!(V instanceof Date)) {
|
|
throw new TypeError("Argument is not a Date object");
|
|
}
|
|
if (isNaN(V)) {
|
|
return undefined;
|
|
}
|
|
|
|
return V;
|
|
};
|
|
|
|
conversions["RegExp"] = function (V, opts) {
|
|
if (!(V instanceof RegExp)) {
|
|
V = new RegExp(V);
|
|
}
|
|
|
|
return V;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7537:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
const usm = __nccwpck_require__(2158);
|
|
|
|
exports.implementation = class URLImpl {
|
|
constructor(constructorArgs) {
|
|
const url = constructorArgs[0];
|
|
const base = constructorArgs[1];
|
|
|
|
let parsedBase = null;
|
|
if (base !== undefined) {
|
|
parsedBase = usm.basicURLParse(base);
|
|
if (parsedBase === "failure") {
|
|
throw new TypeError("Invalid base URL");
|
|
}
|
|
}
|
|
|
|
const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
|
|
if (parsedURL === "failure") {
|
|
throw new TypeError("Invalid URL");
|
|
}
|
|
|
|
this._url = parsedURL;
|
|
|
|
// TODO: query stuff
|
|
}
|
|
|
|
get href() {
|
|
return usm.serializeURL(this._url);
|
|
}
|
|
|
|
set href(v) {
|
|
const parsedURL = usm.basicURLParse(v);
|
|
if (parsedURL === "failure") {
|
|
throw new TypeError("Invalid URL");
|
|
}
|
|
|
|
this._url = parsedURL;
|
|
}
|
|
|
|
get origin() {
|
|
return usm.serializeURLOrigin(this._url);
|
|
}
|
|
|
|
get protocol() {
|
|
return this._url.scheme + ":";
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
usm.setTheUsername(this._url, v);
|
|
}
|
|
|
|
get password() {
|
|
return this._url.password;
|
|
}
|
|
|
|
set password(v) {
|
|
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
|
|
return;
|
|
}
|
|
|
|
usm.setThePassword(this._url, v);
|
|
}
|
|
|
|
get host() {
|
|
const url = this._url;
|
|
|
|
if (url.host === null) {
|
|
return "";
|
|
}
|
|
|
|
if (url.port === null) {
|
|
return usm.serializeHost(url.host);
|
|
}
|
|
|
|
return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
|
|
}
|
|
|
|
set host(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
|
|
}
|
|
|
|
get hostname() {
|
|
if (this._url.host === null) {
|
|
return "";
|
|
}
|
|
|
|
return usm.serializeHost(this._url.host);
|
|
}
|
|
|
|
set hostname(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
|
|
}
|
|
|
|
get port() {
|
|
if (this._url.port === null) {
|
|
return "";
|
|
}
|
|
|
|
return usm.serializeInteger(this._url.port);
|
|
}
|
|
|
|
set port(v) {
|
|
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
|
|
return;
|
|
}
|
|
|
|
if (v === "") {
|
|
this._url.port = null;
|
|
} else {
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
|
|
}
|
|
}
|
|
|
|
get pathname() {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return this._url.path[0];
|
|
}
|
|
|
|
if (this._url.path.length === 0) {
|
|
return "";
|
|
}
|
|
|
|
return "/" + this._url.path.join("/");
|
|
}
|
|
|
|
set pathname(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
const input = v[0] === "?" ? v.substring(1) : v;
|
|
url.query = "";
|
|
usm.basicURLParse(input, { url, stateOverride: "query" });
|
|
}
|
|
|
|
get hash() {
|
|
if (this._url.fragment === null || this._url.fragment === "") {
|
|
return "";
|
|
}
|
|
|
|
return "#" + this._url.fragment;
|
|
}
|
|
|
|
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" });
|
|
}
|
|
|
|
toJSON() {
|
|
return this.href;
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3394:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"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.");
|
|
}
|
|
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);
|
|
}
|
|
|
|
URL.prototype.toJSON = function toJSON() {
|
|
if (!this || !module.exports.is(this)) {
|
|
throw new TypeError("Illegal invocation");
|
|
}
|
|
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
|
|
});
|
|
|
|
URL.prototype.toString = function () {
|
|
if (!this || !module.exports.is(this)) {
|
|
throw new TypeError("Illegal invocation");
|
|
}
|
|
return this.href;
|
|
};
|
|
|
|
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 }
|
|
}
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8665:
|
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
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;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2158:
|
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
|
|
"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 });
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3185:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
|
|
|
|
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];
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2624:
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
exports.stripBOM = function(str) {
|
|
if (str[0] === '\uFEFF') {
|
|
return str.substring(1);
|
|
} else {
|
|
return str;
|
|
}
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3337:
|
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
builder = __nccwpck_require__(2958);
|
|
|
|
defaults = (__nccwpck_require__(7251).defaults);
|
|
|
|
requiresCDATA = function(entry) {
|
|
return typeof entry === "string" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);
|
|
};
|
|
|
|
wrapCDATA = function(entry) {
|
|
return "<![CDATA[" + (escapeCDATA(entry)) + "]]>";
|
|
};
|
|
|
|
escapeCDATA = function(entry) {
|
|
return entry.replace(']]>', ']]]]><![CDATA[>');
|
|
};
|
|
|
|
exports.Builder = (function() {
|
|
function Builder(opts) {
|
|
var key, ref, value;
|
|
this.options = {};
|
|
ref = defaults["0.2"];
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this.options[key] = value;
|
|
}
|
|
for (key in opts) {
|
|
if (!hasProp.call(opts, key)) continue;
|
|
value = opts[key];
|
|
this.options[key] = value;
|
|
}
|
|
}
|
|
|
|
Builder.prototype.buildObject = function(rootObj) {
|
|
var attrkey, charkey, render, rootElement, rootName;
|
|
attrkey = this.options.attrkey;
|
|
charkey = this.options.charkey;
|
|
if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {
|
|
rootName = Object.keys(rootObj)[0];
|
|
rootObj = rootObj[rootName];
|
|
} else {
|
|
rootName = this.options.rootName;
|
|
}
|
|
render = (function(_this) {
|
|
return function(element, obj) {
|
|
var attr, child, entry, index, key, value;
|
|
if (typeof obj !== 'object') {
|
|
if (_this.options.cdata && requiresCDATA(obj)) {
|
|
element.raw(wrapCDATA(obj));
|
|
} else {
|
|
element.txt(obj);
|
|
}
|
|
} else if (Array.isArray(obj)) {
|
|
for (index in obj) {
|
|
if (!hasProp.call(obj, index)) continue;
|
|
child = obj[index];
|
|
for (key in child) {
|
|
entry = child[key];
|
|
element = render(element.ele(key), entry).up();
|
|
}
|
|
}
|
|
} else {
|
|
for (key in obj) {
|
|
if (!hasProp.call(obj, key)) continue;
|
|
child = obj[key];
|
|
if (key === attrkey) {
|
|
if (typeof child === "object") {
|
|
for (attr in child) {
|
|
value = child[attr];
|
|
element = element.att(attr, value);
|
|
}
|
|
}
|
|
} else if (key === charkey) {
|
|
if (_this.options.cdata && requiresCDATA(child)) {
|
|
element = element.raw(wrapCDATA(child));
|
|
} else {
|
|
element = element.txt(child);
|
|
}
|
|
} else if (Array.isArray(child)) {
|
|
for (index in child) {
|
|
if (!hasProp.call(child, index)) continue;
|
|
entry = child[index];
|
|
if (typeof entry === 'string') {
|
|
if (_this.options.cdata && requiresCDATA(entry)) {
|
|
element = element.ele(key).raw(wrapCDATA(entry)).up();
|
|
} else {
|
|
element = element.ele(key, entry).up();
|
|
}
|
|
} else {
|
|
element = render(element.ele(key), entry).up();
|
|
}
|
|
}
|
|
} else if (typeof child === "object") {
|
|
element = render(element.ele(key), child).up();
|
|
} else {
|
|
if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {
|
|
element = element.ele(key).raw(wrapCDATA(child)).up();
|
|
} else {
|
|
if (child == null) {
|
|
child = '';
|
|
}
|
|
element = element.ele(key, child.toString()).up();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return element;
|
|
};
|
|
})(this);
|
|
rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {
|
|
headless: this.options.headless,
|
|
allowSurrogateChars: this.options.allowSurrogateChars
|
|
});
|
|
return render(rootElement, rootObj).end(this.options.renderOpts);
|
|
};
|
|
|
|
return Builder;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7251:
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
exports.defaults = {
|
|
"0.1": {
|
|
explicitCharkey: false,
|
|
trim: true,
|
|
normalize: true,
|
|
normalizeTags: false,
|
|
attrkey: "@",
|
|
charkey: "#",
|
|
explicitArray: false,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: false,
|
|
validator: null,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
childkey: '@@',
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: null,
|
|
attrValueProcessors: null,
|
|
tagNameProcessors: null,
|
|
valueProcessors: null,
|
|
emptyTag: ''
|
|
},
|
|
"0.2": {
|
|
explicitCharkey: false,
|
|
trim: false,
|
|
normalize: false,
|
|
normalizeTags: false,
|
|
attrkey: "$",
|
|
charkey: "_",
|
|
explicitArray: true,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: true,
|
|
validator: null,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
preserveChildrenOrder: false,
|
|
childkey: '$$',
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: null,
|
|
attrValueProcessors: null,
|
|
tagNameProcessors: null,
|
|
valueProcessors: null,
|
|
rootName: 'root',
|
|
xmldec: {
|
|
'version': '1.0',
|
|
'encoding': 'UTF-8',
|
|
'standalone': true
|
|
},
|
|
doctype: null,
|
|
renderOpts: {
|
|
'pretty': true,
|
|
'indent': ' ',
|
|
'newline': '\n'
|
|
},
|
|
headless: false,
|
|
chunkSize: 10000,
|
|
emptyTag: '',
|
|
cdata: false
|
|
}
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3314:
|
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var bom, defaults, events, isEmpty, processItem, processors, sax, setImmediate,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
sax = __nccwpck_require__(2043);
|
|
|
|
events = __nccwpck_require__(2361);
|
|
|
|
bom = __nccwpck_require__(2624);
|
|
|
|
processors = __nccwpck_require__(9236);
|
|
|
|
setImmediate = (__nccwpck_require__(9512).setImmediate);
|
|
|
|
defaults = (__nccwpck_require__(7251).defaults);
|
|
|
|
isEmpty = function(thing) {
|
|
return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0;
|
|
};
|
|
|
|
processItem = function(processors, item, key) {
|
|
var i, len, process;
|
|
for (i = 0, len = processors.length; i < len; i++) {
|
|
process = processors[i];
|
|
item = process(item, key);
|
|
}
|
|
return item;
|
|
};
|
|
|
|
exports.Parser = (function(superClass) {
|
|
extend(Parser, superClass);
|
|
|
|
function Parser(opts) {
|
|
this.parseStringPromise = bind(this.parseStringPromise, this);
|
|
this.parseString = bind(this.parseString, this);
|
|
this.reset = bind(this.reset, this);
|
|
this.assignOrPush = bind(this.assignOrPush, this);
|
|
this.processAsync = bind(this.processAsync, this);
|
|
var key, ref, value;
|
|
if (!(this instanceof exports.Parser)) {
|
|
return new exports.Parser(opts);
|
|
}
|
|
this.options = {};
|
|
ref = defaults["0.2"];
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this.options[key] = value;
|
|
}
|
|
for (key in opts) {
|
|
if (!hasProp.call(opts, key)) continue;
|
|
value = opts[key];
|
|
this.options[key] = value;
|
|
}
|
|
if (this.options.xmlns) {
|
|
this.options.xmlnskey = this.options.attrkey + "ns";
|
|
}
|
|
if (this.options.normalizeTags) {
|
|
if (!this.options.tagNameProcessors) {
|
|
this.options.tagNameProcessors = [];
|
|
}
|
|
this.options.tagNameProcessors.unshift(processors.normalize);
|
|
}
|
|
this.reset();
|
|
}
|
|
|
|
Parser.prototype.processAsync = function() {
|
|
var chunk, err;
|
|
try {
|
|
if (this.remaining.length <= this.options.chunkSize) {
|
|
chunk = this.remaining;
|
|
this.remaining = '';
|
|
this.saxParser = this.saxParser.write(chunk);
|
|
return this.saxParser.close();
|
|
} else {
|
|
chunk = this.remaining.substr(0, this.options.chunkSize);
|
|
this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);
|
|
this.saxParser = this.saxParser.write(chunk);
|
|
return setImmediate(this.processAsync);
|
|
}
|
|
} catch (error1) {
|
|
err = error1;
|
|
if (!this.saxParser.errThrown) {
|
|
this.saxParser.errThrown = true;
|
|
return this.emit(err);
|
|
}
|
|
}
|
|
};
|
|
|
|
Parser.prototype.assignOrPush = function(obj, key, newValue) {
|
|
if (!(key in obj)) {
|
|
if (!this.options.explicitArray) {
|
|
return obj[key] = newValue;
|
|
} else {
|
|
return obj[key] = [newValue];
|
|
}
|
|
} else {
|
|
if (!(obj[key] instanceof Array)) {
|
|
obj[key] = [obj[key]];
|
|
}
|
|
return obj[key].push(newValue);
|
|
}
|
|
};
|
|
|
|
Parser.prototype.reset = function() {
|
|
var attrkey, charkey, ontext, stack;
|
|
this.removeAllListeners();
|
|
this.saxParser = sax.parser(this.options.strict, {
|
|
trim: false,
|
|
normalize: false,
|
|
xmlns: this.options.xmlns
|
|
});
|
|
this.saxParser.errThrown = false;
|
|
this.saxParser.onerror = (function(_this) {
|
|
return function(error) {
|
|
_this.saxParser.resume();
|
|
if (!_this.saxParser.errThrown) {
|
|
_this.saxParser.errThrown = true;
|
|
return _this.emit("error", error);
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.onend = (function(_this) {
|
|
return function() {
|
|
if (!_this.saxParser.ended) {
|
|
_this.saxParser.ended = true;
|
|
return _this.emit("end", _this.resultObject);
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.ended = false;
|
|
this.EXPLICIT_CHARKEY = this.options.explicitCharkey;
|
|
this.resultObject = null;
|
|
stack = [];
|
|
attrkey = this.options.attrkey;
|
|
charkey = this.options.charkey;
|
|
this.saxParser.onopentag = (function(_this) {
|
|
return function(node) {
|
|
var key, newValue, obj, processedKey, ref;
|
|
obj = {};
|
|
obj[charkey] = "";
|
|
if (!_this.options.ignoreAttrs) {
|
|
ref = node.attributes;
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
if (!(attrkey in obj) && !_this.options.mergeAttrs) {
|
|
obj[attrkey] = {};
|
|
}
|
|
newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];
|
|
processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;
|
|
if (_this.options.mergeAttrs) {
|
|
_this.assignOrPush(obj, processedKey, newValue);
|
|
} else {
|
|
obj[attrkey][processedKey] = newValue;
|
|
}
|
|
}
|
|
}
|
|
obj["#name"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;
|
|
if (_this.options.xmlns) {
|
|
obj[_this.options.xmlnskey] = {
|
|
uri: node.uri,
|
|
local: node.local
|
|
};
|
|
}
|
|
return stack.push(obj);
|
|
};
|
|
})(this);
|
|
this.saxParser.onclosetag = (function(_this) {
|
|
return function() {
|
|
var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;
|
|
obj = stack.pop();
|
|
nodeName = obj["#name"];
|
|
if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {
|
|
delete obj["#name"];
|
|
}
|
|
if (obj.cdata === true) {
|
|
cdata = obj.cdata;
|
|
delete obj.cdata;
|
|
}
|
|
s = stack[stack.length - 1];
|
|
if (obj[charkey].match(/^\s*$/) && !cdata) {
|
|
emptyStr = obj[charkey];
|
|
delete obj[charkey];
|
|
} else {
|
|
if (_this.options.trim) {
|
|
obj[charkey] = obj[charkey].trim();
|
|
}
|
|
if (_this.options.normalize) {
|
|
obj[charkey] = obj[charkey].replace(/\s{2,}/g, " ").trim();
|
|
}
|
|
obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];
|
|
if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
|
|
obj = obj[charkey];
|
|
}
|
|
}
|
|
if (isEmpty(obj)) {
|
|
obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;
|
|
}
|
|
if (_this.options.validator != null) {
|
|
xpath = "/" + ((function() {
|
|
var i, len, results;
|
|
results = [];
|
|
for (i = 0, len = stack.length; i < len; i++) {
|
|
node = stack[i];
|
|
results.push(node["#name"]);
|
|
}
|
|
return results;
|
|
})()).concat(nodeName).join("/");
|
|
(function() {
|
|
var err;
|
|
try {
|
|
return obj = _this.options.validator(xpath, s && s[nodeName], obj);
|
|
} catch (error1) {
|
|
err = error1;
|
|
return _this.emit("error", err);
|
|
}
|
|
})();
|
|
}
|
|
if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {
|
|
if (!_this.options.preserveChildrenOrder) {
|
|
node = {};
|
|
if (_this.options.attrkey in obj) {
|
|
node[_this.options.attrkey] = obj[_this.options.attrkey];
|
|
delete obj[_this.options.attrkey];
|
|
}
|
|
if (!_this.options.charsAsChildren && _this.options.charkey in obj) {
|
|
node[_this.options.charkey] = obj[_this.options.charkey];
|
|
delete obj[_this.options.charkey];
|
|
}
|
|
if (Object.getOwnPropertyNames(obj).length > 0) {
|
|
node[_this.options.childkey] = obj;
|
|
}
|
|
obj = node;
|
|
} else if (s) {
|
|
s[_this.options.childkey] = s[_this.options.childkey] || [];
|
|
objClone = {};
|
|
for (key in obj) {
|
|
if (!hasProp.call(obj, key)) continue;
|
|
objClone[key] = obj[key];
|
|
}
|
|
s[_this.options.childkey].push(objClone);
|
|
delete obj["#name"];
|
|
if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
|
|
obj = obj[charkey];
|
|
}
|
|
}
|
|
}
|
|
if (stack.length > 0) {
|
|
return _this.assignOrPush(s, nodeName, obj);
|
|
} else {
|
|
if (_this.options.explicitRoot) {
|
|
old = obj;
|
|
obj = {};
|
|
obj[nodeName] = old;
|
|
}
|
|
_this.resultObject = obj;
|
|
_this.saxParser.ended = true;
|
|
return _this.emit("end", _this.resultObject);
|
|
}
|
|
};
|
|
})(this);
|
|
ontext = (function(_this) {
|
|
return function(text) {
|
|
var charChild, s;
|
|
s = stack[stack.length - 1];
|
|
if (s) {
|
|
s[charkey] += text;
|
|
if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\n/g, '').trim() !== '')) {
|
|
s[_this.options.childkey] = s[_this.options.childkey] || [];
|
|
charChild = {
|
|
'#name': '__text__'
|
|
};
|
|
charChild[charkey] = text;
|
|
if (_this.options.normalize) {
|
|
charChild[charkey] = charChild[charkey].replace(/\s{2,}/g, " ").trim();
|
|
}
|
|
s[_this.options.childkey].push(charChild);
|
|
}
|
|
return s;
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.ontext = ontext;
|
|
return this.saxParser.oncdata = (function(_this) {
|
|
return function(text) {
|
|
var s;
|
|
s = ontext(text);
|
|
if (s) {
|
|
return s.cdata = true;
|
|
}
|
|
};
|
|
})(this);
|
|
};
|
|
|
|
Parser.prototype.parseString = function(str, cb) {
|
|
var err;
|
|
if ((cb != null) && typeof cb === "function") {
|
|
this.on("end", function(result) {
|
|
this.reset();
|
|
return cb(null, result);
|
|
});
|
|
this.on("error", function(err) {
|
|
this.reset();
|
|
return cb(err);
|
|
});
|
|
}
|
|
try {
|
|
str = str.toString();
|
|
if (str.trim() === '') {
|
|
this.emit("end", null);
|
|
return true;
|
|
}
|
|
str = bom.stripBOM(str);
|
|
if (this.options.async) {
|
|
this.remaining = str;
|
|
setImmediate(this.processAsync);
|
|
return this.saxParser;
|
|
}
|
|
return this.saxParser.write(str).close();
|
|
} catch (error1) {
|
|
err = error1;
|
|
if (!(this.saxParser.errThrown || this.saxParser.ended)) {
|
|
this.emit('error', err);
|
|
return this.saxParser.errThrown = true;
|
|
} else if (this.saxParser.ended) {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
Parser.prototype.parseStringPromise = function(str) {
|
|
return new Promise((function(_this) {
|
|
return function(resolve, reject) {
|
|
return _this.parseString(str, function(err, value) {
|
|
if (err) {
|
|
return reject(err);
|
|
} else {
|
|
return resolve(value);
|
|
}
|
|
});
|
|
};
|
|
})(this));
|
|
};
|
|
|
|
return Parser;
|
|
|
|
})(events);
|
|
|
|
exports.parseString = function(str, a, b) {
|
|
var cb, options, parser;
|
|
if (b != null) {
|
|
if (typeof b === 'function') {
|
|
cb = b;
|
|
}
|
|
if (typeof a === 'object') {
|
|
options = a;
|
|
}
|
|
} else {
|
|
if (typeof a === 'function') {
|
|
cb = a;
|
|
}
|
|
options = {};
|
|
}
|
|
parser = new exports.Parser(options);
|
|
return parser.parseString(str, cb);
|
|
};
|
|
|
|
exports.parseStringPromise = function(str, a) {
|
|
var options, parser;
|
|
if (typeof a === 'object') {
|
|
options = a;
|
|
}
|
|
parser = new exports.Parser(options);
|
|
return parser.parseStringPromise(str);
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9236:
|
|
/***/ (function(__unused_webpack_module, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var prefixMatch;
|
|
|
|
prefixMatch = new RegExp(/(?!xmlns)^.*:/);
|
|
|
|
exports.normalize = function(str) {
|
|
return str.toLowerCase();
|
|
};
|
|
|
|
exports.firstCharLowerCase = function(str) {
|
|
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
};
|
|
|
|
exports.stripPrefix = function(str) {
|
|
return str.replace(prefixMatch, '');
|
|
};
|
|
|
|
exports.parseNumbers = function(str) {
|
|
if (!isNaN(str)) {
|
|
str = str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);
|
|
}
|
|
return str;
|
|
};
|
|
|
|
exports.parseBooleans = function(str) {
|
|
if (/^(?:true|false)$/i.test(str)) {
|
|
str = str.toLowerCase() === 'true';
|
|
}
|
|
return str;
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6189:
|
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var builder, defaults, parser, processors,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
defaults = __nccwpck_require__(7251);
|
|
|
|
builder = __nccwpck_require__(3337);
|
|
|
|
parser = __nccwpck_require__(3314);
|
|
|
|
processors = __nccwpck_require__(9236);
|
|
|
|
exports.defaults = defaults.defaults;
|
|
|
|
exports.processors = processors;
|
|
|
|
exports.ValidationError = (function(superClass) {
|
|
extend(ValidationError, superClass);
|
|
|
|
function ValidationError(message) {
|
|
this.message = message;
|
|
}
|
|
|
|
return ValidationError;
|
|
|
|
})(Error);
|
|
|
|
exports.Builder = builder.Builder;
|
|
|
|
exports.Parser = parser.Parser;
|
|
|
|
exports.parseString = parser.parseString;
|
|
|
|
exports.parseStringPromise = parser.parseStringPromise;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2839:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
Disconnected: 1,
|
|
Preceding: 2,
|
|
Following: 4,
|
|
Contains: 8,
|
|
ContainedBy: 16,
|
|
ImplementationSpecific: 32
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9267:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
Element: 1,
|
|
Attribute: 2,
|
|
Text: 3,
|
|
CData: 4,
|
|
EntityReference: 5,
|
|
EntityDeclaration: 6,
|
|
ProcessingInstruction: 7,
|
|
Comment: 8,
|
|
Document: 9,
|
|
DocType: 10,
|
|
DocumentFragment: 11,
|
|
NotationDeclaration: 12,
|
|
Declaration: 201,
|
|
Raw: 202,
|
|
AttributeDeclaration: 203,
|
|
ElementDeclaration: 204,
|
|
Dummy: 205
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8229:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,
|
|
slice = [].slice,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
assign = function() {
|
|
var i, key, len, source, sources, target;
|
|
target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
|
if (isFunction(Object.assign)) {
|
|
Object.assign.apply(null, arguments);
|
|
} else {
|
|
for (i = 0, len = sources.length; i < len; i++) {
|
|
source = sources[i];
|
|
if (source != null) {
|
|
for (key in source) {
|
|
if (!hasProp.call(source, key)) continue;
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
|
|
isFunction = function(val) {
|
|
return !!val && Object.prototype.toString.call(val) === '[object Function]';
|
|
};
|
|
|
|
isObject = function(val) {
|
|
var ref;
|
|
return !!val && ((ref = typeof val) === 'function' || ref === 'object');
|
|
};
|
|
|
|
isArray = function(val) {
|
|
if (isFunction(Array.isArray)) {
|
|
return Array.isArray(val);
|
|
} else {
|
|
return Object.prototype.toString.call(val) === '[object Array]';
|
|
}
|
|
};
|
|
|
|
isEmpty = function(val) {
|
|
var key;
|
|
if (isArray(val)) {
|
|
return !val.length;
|
|
} else {
|
|
for (key in val) {
|
|
if (!hasProp.call(val, key)) continue;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
|
|
isPlainObject = function(val) {
|
|
var ctor, proto;
|
|
return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));
|
|
};
|
|
|
|
getValue = function(obj) {
|
|
if (isFunction(obj.valueOf)) {
|
|
return obj.valueOf();
|
|
} else {
|
|
return obj;
|
|
}
|
|
};
|
|
|
|
module.exports.assign = assign;
|
|
|
|
module.exports.isFunction = isFunction;
|
|
|
|
module.exports.isObject = isObject;
|
|
|
|
module.exports.isArray = isArray;
|
|
|
|
module.exports.isEmpty = isEmpty;
|
|
|
|
module.exports.isPlainObject = isPlainObject;
|
|
|
|
module.exports.getValue = getValue;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9766:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
None: 0,
|
|
OpenTag: 1,
|
|
InsideTag: 2,
|
|
CloseTag: 3
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8376:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLAttribute, XMLNode;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
module.exports = XMLAttribute = (function() {
|
|
function XMLAttribute(parent, name, value) {
|
|
this.parent = parent;
|
|
if (this.parent) {
|
|
this.options = this.parent.options;
|
|
this.stringify = this.parent.stringify;
|
|
}
|
|
if (name == null) {
|
|
throw new Error("Missing attribute name. " + this.debugInfo(name));
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.value = this.stringify.attValue(value);
|
|
this.type = NodeType.Attribute;
|
|
this.isId = false;
|
|
this.schemaTypeInfo = null;
|
|
}
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'nodeType', {
|
|
get: function() {
|
|
return this.type;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'ownerElement', {
|
|
get: function() {
|
|
return this.parent;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'textContent', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'namespaceURI', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'prefix', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'localName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'specified', {
|
|
get: function() {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
XMLAttribute.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLAttribute.prototype.toString = function(options) {
|
|
return this.options.writer.attribute(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLAttribute.prototype.debugInfo = function(name) {
|
|
name = name || this.name;
|
|
if (name == null) {
|
|
return "parent: <" + this.parent.name + ">";
|
|
} else {
|
|
return "attribute: {" + name + "}, parent: <" + this.parent.name + ">";
|
|
}
|
|
};
|
|
|
|
XMLAttribute.prototype.isEqualNode = function(node) {
|
|
if (node.namespaceURI !== this.namespaceURI) {
|
|
return false;
|
|
}
|
|
if (node.prefix !== this.prefix) {
|
|
return false;
|
|
}
|
|
if (node.localName !== this.localName) {
|
|
return false;
|
|
}
|
|
if (node.value !== this.value) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLAttribute;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 333:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCData, XMLCharacterData,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLCharacterData = __nccwpck_require__(7709);
|
|
|
|
module.exports = XMLCData = (function(superClass) {
|
|
extend(XMLCData, superClass);
|
|
|
|
function XMLCData(parent, text) {
|
|
XMLCData.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing CDATA text. " + this.debugInfo());
|
|
}
|
|
this.name = "#cdata-section";
|
|
this.type = NodeType.CData;
|
|
this.value = this.stringify.cdata(text);
|
|
}
|
|
|
|
XMLCData.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLCData.prototype.toString = function(options) {
|
|
return this.options.writer.cdata(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLCData;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7709:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLCharacterData, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
module.exports = XMLCharacterData = (function(superClass) {
|
|
extend(XMLCharacterData, superClass);
|
|
|
|
function XMLCharacterData(parent) {
|
|
XMLCharacterData.__super__.constructor.call(this, parent);
|
|
this.value = '';
|
|
}
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'data', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'length', {
|
|
get: function() {
|
|
return this.value.length;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'textContent', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
XMLCharacterData.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLCharacterData.prototype.substringData = function(offset, count) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.appendData = function(arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.insertData = function(offset, arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.deleteData = function(offset, count) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.replaceData = function(offset, count, arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.isEqualNode = function(node) {
|
|
if (!XMLCharacterData.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.data !== this.data) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLCharacterData;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4407:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLComment,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLCharacterData = __nccwpck_require__(7709);
|
|
|
|
module.exports = XMLComment = (function(superClass) {
|
|
extend(XMLComment, superClass);
|
|
|
|
function XMLComment(parent, text) {
|
|
XMLComment.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing comment text. " + this.debugInfo());
|
|
}
|
|
this.name = "#comment";
|
|
this.type = NodeType.Comment;
|
|
this.value = this.stringify.comment(text);
|
|
}
|
|
|
|
XMLComment.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLComment.prototype.toString = function(options) {
|
|
return this.options.writer.comment(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLComment;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7465:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList;
|
|
|
|
XMLDOMErrorHandler = __nccwpck_require__(6744);
|
|
|
|
XMLDOMStringList = __nccwpck_require__(7028);
|
|
|
|
module.exports = XMLDOMConfiguration = (function() {
|
|
function XMLDOMConfiguration() {
|
|
var clonedSelf;
|
|
this.defaultParams = {
|
|
"canonical-form": false,
|
|
"cdata-sections": false,
|
|
"comments": false,
|
|
"datatype-normalization": false,
|
|
"element-content-whitespace": true,
|
|
"entities": true,
|
|
"error-handler": new XMLDOMErrorHandler(),
|
|
"infoset": true,
|
|
"validate-if-schema": false,
|
|
"namespaces": true,
|
|
"namespace-declarations": true,
|
|
"normalize-characters": false,
|
|
"schema-location": '',
|
|
"schema-type": '',
|
|
"split-cdata-sections": true,
|
|
"validate": false,
|
|
"well-formed": true
|
|
};
|
|
this.params = clonedSelf = Object.create(this.defaultParams);
|
|
}
|
|
|
|
Object.defineProperty(XMLDOMConfiguration.prototype, 'parameterNames', {
|
|
get: function() {
|
|
return new XMLDOMStringList(Object.keys(this.defaultParams));
|
|
}
|
|
});
|
|
|
|
XMLDOMConfiguration.prototype.getParameter = function(name) {
|
|
if (this.params.hasOwnProperty(name)) {
|
|
return this.params[name];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLDOMConfiguration.prototype.canSetParameter = function(name, value) {
|
|
return true;
|
|
};
|
|
|
|
XMLDOMConfiguration.prototype.setParameter = function(name, value) {
|
|
if (value != null) {
|
|
return this.params[name] = value;
|
|
} else {
|
|
return delete this.params[name];
|
|
}
|
|
};
|
|
|
|
return XMLDOMConfiguration;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6744:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMErrorHandler;
|
|
|
|
module.exports = XMLDOMErrorHandler = (function() {
|
|
function XMLDOMErrorHandler() {}
|
|
|
|
XMLDOMErrorHandler.prototype.handleError = function(error) {
|
|
throw new Error(error);
|
|
};
|
|
|
|
return XMLDOMErrorHandler;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8310:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMImplementation;
|
|
|
|
module.exports = XMLDOMImplementation = (function() {
|
|
function XMLDOMImplementation() {}
|
|
|
|
XMLDOMImplementation.prototype.hasFeature = function(feature, version) {
|
|
return true;
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createHTMLDocument = function(title) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.getFeature = function(feature, version) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
return XMLDOMImplementation;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7028:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMStringList;
|
|
|
|
module.exports = XMLDOMStringList = (function() {
|
|
function XMLDOMStringList(arr) {
|
|
this.arr = arr || [];
|
|
}
|
|
|
|
Object.defineProperty(XMLDOMStringList.prototype, 'length', {
|
|
get: function() {
|
|
return this.arr.length;
|
|
}
|
|
});
|
|
|
|
XMLDOMStringList.prototype.item = function(index) {
|
|
return this.arr[index] || null;
|
|
};
|
|
|
|
XMLDOMStringList.prototype.contains = function(str) {
|
|
return this.arr.indexOf(str) !== -1;
|
|
};
|
|
|
|
return XMLDOMStringList;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1015:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDAttList, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDTDAttList = (function(superClass) {
|
|
extend(XMLDTDAttList, superClass);
|
|
|
|
function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
XMLDTDAttList.__super__.constructor.call(this, parent);
|
|
if (elementName == null) {
|
|
throw new Error("Missing DTD element name. " + this.debugInfo());
|
|
}
|
|
if (attributeName == null) {
|
|
throw new Error("Missing DTD attribute name. " + this.debugInfo(elementName));
|
|
}
|
|
if (!attributeType) {
|
|
throw new Error("Missing DTD attribute type. " + this.debugInfo(elementName));
|
|
}
|
|
if (!defaultValueType) {
|
|
throw new Error("Missing DTD attribute default. " + this.debugInfo(elementName));
|
|
}
|
|
if (defaultValueType.indexOf('#') !== 0) {
|
|
defaultValueType = '#' + defaultValueType;
|
|
}
|
|
if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
|
|
throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. " + this.debugInfo(elementName));
|
|
}
|
|
if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
|
|
throw new Error("Default value only applies to #FIXED or #DEFAULT. " + this.debugInfo(elementName));
|
|
}
|
|
this.elementName = this.stringify.name(elementName);
|
|
this.type = NodeType.AttributeDeclaration;
|
|
this.attributeName = this.stringify.name(attributeName);
|
|
this.attributeType = this.stringify.dtdAttType(attributeType);
|
|
if (defaultValue) {
|
|
this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
|
|
}
|
|
this.defaultValueType = defaultValueType;
|
|
}
|
|
|
|
XMLDTDAttList.prototype.toString = function(options) {
|
|
return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDAttList;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2421:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDElement, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDTDElement = (function(superClass) {
|
|
extend(XMLDTDElement, superClass);
|
|
|
|
function XMLDTDElement(parent, name, value) {
|
|
XMLDTDElement.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD element name. " + this.debugInfo());
|
|
}
|
|
if (!value) {
|
|
value = '(#PCDATA)';
|
|
}
|
|
if (Array.isArray(value)) {
|
|
value = '(' + value.join(',') + ')';
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.ElementDeclaration;
|
|
this.value = this.stringify.dtdElementValue(value);
|
|
}
|
|
|
|
XMLDTDElement.prototype.toString = function(options) {
|
|
return this.options.writer.dtdElement(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDElement;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 53:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDEntity, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = (__nccwpck_require__(8229).isObject);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDTDEntity = (function(superClass) {
|
|
extend(XMLDTDEntity, superClass);
|
|
|
|
function XMLDTDEntity(parent, pe, name, value) {
|
|
XMLDTDEntity.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD entity name. " + this.debugInfo(name));
|
|
}
|
|
if (value == null) {
|
|
throw new Error("Missing DTD entity value. " + this.debugInfo(name));
|
|
}
|
|
this.pe = !!pe;
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.EntityDeclaration;
|
|
if (!isObject(value)) {
|
|
this.value = this.stringify.dtdEntityValue(value);
|
|
this.internal = true;
|
|
} else {
|
|
if (!value.pubID && !value.sysID) {
|
|
throw new Error("Public and/or system identifiers are required for an external entity. " + this.debugInfo(name));
|
|
}
|
|
if (value.pubID && !value.sysID) {
|
|
throw new Error("System identifier is required for a public external entity. " + this.debugInfo(name));
|
|
}
|
|
this.internal = false;
|
|
if (value.pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(value.pubID);
|
|
}
|
|
if (value.sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(value.sysID);
|
|
}
|
|
if (value.nData != null) {
|
|
this.nData = this.stringify.dtdNData(value.nData);
|
|
}
|
|
if (this.pe && this.nData) {
|
|
throw new Error("Notation declaration is not allowed in a parameter entity. " + this.debugInfo(name));
|
|
}
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'notationName', {
|
|
get: function() {
|
|
return this.nData || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'inputEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'xmlEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'xmlVersion', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
XMLDTDEntity.prototype.toString = function(options) {
|
|
return this.options.writer.dtdEntity(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDEntity;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2837:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDNotation, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDTDNotation = (function(superClass) {
|
|
extend(XMLDTDNotation, superClass);
|
|
|
|
function XMLDTDNotation(parent, name, value) {
|
|
XMLDTDNotation.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD notation name. " + this.debugInfo(name));
|
|
}
|
|
if (!value.pubID && !value.sysID) {
|
|
throw new Error("Public or system identifiers are required for an external entity. " + this.debugInfo(name));
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.NotationDeclaration;
|
|
if (value.pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(value.pubID);
|
|
}
|
|
if (value.sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(value.sysID);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDTDNotation.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDNotation.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
XMLDTDNotation.prototype.toString = function(options) {
|
|
return this.options.writer.dtdNotation(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDNotation;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6364:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDeclaration, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = (__nccwpck_require__(8229).isObject);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDeclaration = (function(superClass) {
|
|
extend(XMLDeclaration, superClass);
|
|
|
|
function XMLDeclaration(parent, version, encoding, standalone) {
|
|
var ref;
|
|
XMLDeclaration.__super__.constructor.call(this, parent);
|
|
if (isObject(version)) {
|
|
ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;
|
|
}
|
|
if (!version) {
|
|
version = '1.0';
|
|
}
|
|
this.type = NodeType.Declaration;
|
|
this.version = this.stringify.xmlVersion(version);
|
|
if (encoding != null) {
|
|
this.encoding = this.stringify.xmlEncoding(encoding);
|
|
}
|
|
if (standalone != null) {
|
|
this.standalone = this.stringify.xmlStandalone(standalone);
|
|
}
|
|
}
|
|
|
|
XMLDeclaration.prototype.toString = function(options) {
|
|
return this.options.writer.declaration(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDeclaration;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1801:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = (__nccwpck_require__(8229).isObject);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLDTDAttList = __nccwpck_require__(1015);
|
|
|
|
XMLDTDEntity = __nccwpck_require__(53);
|
|
|
|
XMLDTDElement = __nccwpck_require__(2421);
|
|
|
|
XMLDTDNotation = __nccwpck_require__(2837);
|
|
|
|
XMLNamedNodeMap = __nccwpck_require__(4361);
|
|
|
|
module.exports = XMLDocType = (function(superClass) {
|
|
extend(XMLDocType, superClass);
|
|
|
|
function XMLDocType(parent, pubID, sysID) {
|
|
var child, i, len, ref, ref1, ref2;
|
|
XMLDocType.__super__.constructor.call(this, parent);
|
|
this.type = NodeType.DocType;
|
|
if (parent.children) {
|
|
ref = parent.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.Element) {
|
|
this.name = child.name;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.documentObject = parent;
|
|
if (isObject(pubID)) {
|
|
ref1 = pubID, pubID = ref1.pubID, sysID = ref1.sysID;
|
|
}
|
|
if (sysID == null) {
|
|
ref2 = [pubID, sysID], sysID = ref2[0], pubID = ref2[1];
|
|
}
|
|
if (pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(pubID);
|
|
}
|
|
if (sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(sysID);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'entities', {
|
|
get: function() {
|
|
var child, i, len, nodes, ref;
|
|
nodes = {};
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
|
|
nodes[child.name] = child;
|
|
}
|
|
}
|
|
return new XMLNamedNodeMap(nodes);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'notations', {
|
|
get: function() {
|
|
var child, i, len, nodes, ref;
|
|
nodes = {};
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.NotationDeclaration) {
|
|
nodes[child.name] = child;
|
|
}
|
|
}
|
|
return new XMLNamedNodeMap(nodes);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'internalSubset', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
XMLDocType.prototype.element = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDElement(this, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
var child;
|
|
child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.entity = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDEntity(this, false, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.pEntity = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDEntity(this, true, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.notation = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDNotation(this, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.toString = function(options) {
|
|
return this.options.writer.docType(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLDocType.prototype.ele = function(name, value) {
|
|
return this.element(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
};
|
|
|
|
XMLDocType.prototype.ent = function(name, value) {
|
|
return this.entity(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.pent = function(name, value) {
|
|
return this.pEntity(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.not = function(name, value) {
|
|
return this.notation(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.up = function() {
|
|
return this.root() || this.documentObject;
|
|
};
|
|
|
|
XMLDocType.prototype.isEqualNode = function(node) {
|
|
if (!XMLDocType.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.name !== this.name) {
|
|
return false;
|
|
}
|
|
if (node.publicId !== this.publicId) {
|
|
return false;
|
|
}
|
|
if (node.systemId !== this.systemId) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLDocType;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3730:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDOMConfiguration, XMLDOMImplementation, XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isPlainObject = (__nccwpck_require__(8229).isPlainObject);
|
|
|
|
XMLDOMImplementation = __nccwpck_require__(8310);
|
|
|
|
XMLDOMConfiguration = __nccwpck_require__(7465);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLStringifier = __nccwpck_require__(8594);
|
|
|
|
XMLStringWriter = __nccwpck_require__(5913);
|
|
|
|
module.exports = XMLDocument = (function(superClass) {
|
|
extend(XMLDocument, superClass);
|
|
|
|
function XMLDocument(options) {
|
|
XMLDocument.__super__.constructor.call(this, null);
|
|
this.name = "#document";
|
|
this.type = NodeType.Document;
|
|
this.documentURI = null;
|
|
this.domConfig = new XMLDOMConfiguration();
|
|
options || (options = {});
|
|
if (!options.writer) {
|
|
options.writer = new XMLStringWriter();
|
|
}
|
|
this.options = options;
|
|
this.stringify = new XMLStringifier(options);
|
|
}
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'implementation', {
|
|
value: new XMLDOMImplementation()
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'doctype', {
|
|
get: function() {
|
|
var child, i, len, ref;
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.DocType) {
|
|
return child;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'documentElement', {
|
|
get: function() {
|
|
return this.rootObject || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'inputEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'strictErrorChecking', {
|
|
get: function() {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlEncoding', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].encoding;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlStandalone', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].standalone === 'yes';
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlVersion', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].version;
|
|
} else {
|
|
return "1.0";
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'URL', {
|
|
get: function() {
|
|
return this.documentURI;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'origin', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'compatMode', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'characterSet', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'contentType', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
XMLDocument.prototype.end = function(writer) {
|
|
var writerOptions;
|
|
writerOptions = {};
|
|
if (!writer) {
|
|
writer = this.options.writer;
|
|
} else if (isPlainObject(writer)) {
|
|
writerOptions = writer;
|
|
writer = this.options.writer;
|
|
}
|
|
return writer.document(this, writer.filterOptions(writerOptions));
|
|
};
|
|
|
|
XMLDocument.prototype.toString = function(options) {
|
|
return this.options.writer.document(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLDocument.prototype.createElement = function(tagName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createDocumentFragment = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createTextNode = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createComment = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createCDATASection = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createProcessingInstruction = function(target, data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createAttribute = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createEntityReference = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByTagName = function(tagname) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.importNode = function(importedNode, deep) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createElementNS = function(namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementById = function(elementId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.adoptNode = function(source) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.normalizeDocument = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.renameNode = function(node, namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByClassName = function(classNames) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createEvent = function(eventInterface) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createRange = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createNodeIterator = function(root, whatToShow, filter) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createTreeWalker = function(root, whatToShow, filter) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
return XMLDocument;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7356:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref = __nccwpck_require__(8229), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLDocument = __nccwpck_require__(3730);
|
|
|
|
XMLElement = __nccwpck_require__(9437);
|
|
|
|
XMLCData = __nccwpck_require__(333);
|
|
|
|
XMLComment = __nccwpck_require__(4407);
|
|
|
|
XMLRaw = __nccwpck_require__(6329);
|
|
|
|
XMLText = __nccwpck_require__(1318);
|
|
|
|
XMLProcessingInstruction = __nccwpck_require__(6939);
|
|
|
|
XMLDeclaration = __nccwpck_require__(6364);
|
|
|
|
XMLDocType = __nccwpck_require__(1801);
|
|
|
|
XMLDTDAttList = __nccwpck_require__(1015);
|
|
|
|
XMLDTDEntity = __nccwpck_require__(53);
|
|
|
|
XMLDTDElement = __nccwpck_require__(2421);
|
|
|
|
XMLDTDNotation = __nccwpck_require__(2837);
|
|
|
|
XMLAttribute = __nccwpck_require__(8376);
|
|
|
|
XMLStringifier = __nccwpck_require__(8594);
|
|
|
|
XMLStringWriter = __nccwpck_require__(5913);
|
|
|
|
WriterState = __nccwpck_require__(9766);
|
|
|
|
module.exports = XMLDocumentCB = (function() {
|
|
function XMLDocumentCB(options, onData, onEnd) {
|
|
var writerOptions;
|
|
this.name = "?xml";
|
|
this.type = NodeType.Document;
|
|
options || (options = {});
|
|
writerOptions = {};
|
|
if (!options.writer) {
|
|
options.writer = new XMLStringWriter();
|
|
} else if (isPlainObject(options.writer)) {
|
|
writerOptions = options.writer;
|
|
options.writer = new XMLStringWriter();
|
|
}
|
|
this.options = options;
|
|
this.writer = options.writer;
|
|
this.writerOptions = this.writer.filterOptions(writerOptions);
|
|
this.stringify = new XMLStringifier(options);
|
|
this.onDataCallback = onData || function() {};
|
|
this.onEndCallback = onEnd || function() {};
|
|
this.currentNode = null;
|
|
this.currentLevel = -1;
|
|
this.openTags = {};
|
|
this.documentStarted = false;
|
|
this.documentCompleted = false;
|
|
this.root = null;
|
|
}
|
|
|
|
XMLDocumentCB.prototype.createChildNode = function(node) {
|
|
var att, attName, attributes, child, i, len, ref1, ref2;
|
|
switch (node.type) {
|
|
case NodeType.CData:
|
|
this.cdata(node.value);
|
|
break;
|
|
case NodeType.Comment:
|
|
this.comment(node.value);
|
|
break;
|
|
case NodeType.Element:
|
|
attributes = {};
|
|
ref1 = node.attribs;
|
|
for (attName in ref1) {
|
|
if (!hasProp.call(ref1, attName)) continue;
|
|
att = ref1[attName];
|
|
attributes[attName] = att.value;
|
|
}
|
|
this.node(node.name, attributes);
|
|
break;
|
|
case NodeType.Dummy:
|
|
this.dummy();
|
|
break;
|
|
case NodeType.Raw:
|
|
this.raw(node.value);
|
|
break;
|
|
case NodeType.Text:
|
|
this.text(node.value);
|
|
break;
|
|
case NodeType.ProcessingInstruction:
|
|
this.instruction(node.target, node.value);
|
|
break;
|
|
default:
|
|
throw new Error("This XML node type is not supported in a JS object: " + node.constructor.name);
|
|
}
|
|
ref2 = node.children;
|
|
for (i = 0, len = ref2.length; i < len; i++) {
|
|
child = ref2[i];
|
|
this.createChildNode(child);
|
|
if (child.type === NodeType.Element) {
|
|
this.up();
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dummy = function() {
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.node = function(name, attributes, text) {
|
|
var ref1;
|
|
if (name == null) {
|
|
throw new Error("Missing node name.");
|
|
}
|
|
if (this.root && this.currentLevel === -1) {
|
|
throw new Error("Document can only have one root node. " + this.debugInfo(name));
|
|
}
|
|
this.openCurrent();
|
|
name = getValue(name);
|
|
if (attributes == null) {
|
|
attributes = {};
|
|
}
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];
|
|
}
|
|
this.currentNode = new XMLElement(this, name, attributes);
|
|
this.currentNode.children = false;
|
|
this.currentLevel++;
|
|
this.openTags[this.currentLevel] = this.currentNode;
|
|
if (text != null) {
|
|
this.text(text);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.element = function(name, attributes, text) {
|
|
var child, i, len, oldValidationFlag, ref1, root;
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
this.dtdElement.apply(this, arguments);
|
|
} else {
|
|
if (Array.isArray(name) || isObject(name) || isFunction(name)) {
|
|
oldValidationFlag = this.options.noValidation;
|
|
this.options.noValidation = true;
|
|
root = new XMLDocument(this.options).element('TEMP_ROOT');
|
|
root.element(name);
|
|
this.options.noValidation = oldValidationFlag;
|
|
ref1 = root.children;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
child = ref1[i];
|
|
this.createChildNode(child);
|
|
if (child.type === NodeType.Element) {
|
|
this.up();
|
|
}
|
|
}
|
|
} else {
|
|
this.node(name, attributes, text);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.attribute = function(name, value) {
|
|
var attName, attValue;
|
|
if (!this.currentNode || this.currentNode.children) {
|
|
throw new Error("att() can only be used immediately after an ele() call in callback mode. " + this.debugInfo(name));
|
|
}
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (isObject(name)) {
|
|
for (attName in name) {
|
|
if (!hasProp.call(name, attName)) continue;
|
|
attValue = name[attName];
|
|
this.attribute(attName, attValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
if (this.options.keepNullAttributes && (value == null)) {
|
|
this.currentNode.attribs[name] = new XMLAttribute(this, name, "");
|
|
} else if (value != null) {
|
|
this.currentNode.attribs[name] = new XMLAttribute(this, name, value);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.text = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLText(this, value);
|
|
this.onData(this.writer.text(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.cdata = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLCData(this, value);
|
|
this.onData(this.writer.cdata(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.comment = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLComment(this, value);
|
|
this.onData(this.writer.comment(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.raw = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLRaw(this, value);
|
|
this.onData(this.writer.raw(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.instruction = function(target, value) {
|
|
var i, insTarget, insValue, len, node;
|
|
this.openCurrent();
|
|
if (target != null) {
|
|
target = getValue(target);
|
|
}
|
|
if (value != null) {
|
|
value = getValue(value);
|
|
}
|
|
if (Array.isArray(target)) {
|
|
for (i = 0, len = target.length; i < len; i++) {
|
|
insTarget = target[i];
|
|
this.instruction(insTarget);
|
|
}
|
|
} else if (isObject(target)) {
|
|
for (insTarget in target) {
|
|
if (!hasProp.call(target, insTarget)) continue;
|
|
insValue = target[insTarget];
|
|
this.instruction(insTarget, insValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
node = new XMLProcessingInstruction(this, target, value);
|
|
this.onData(this.writer.processingInstruction(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {
|
|
var node;
|
|
this.openCurrent();
|
|
if (this.documentStarted) {
|
|
throw new Error("declaration() must be the first node.");
|
|
}
|
|
node = new XMLDeclaration(this, version, encoding, standalone);
|
|
this.onData(this.writer.declaration(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {
|
|
this.openCurrent();
|
|
if (root == null) {
|
|
throw new Error("Missing root node name.");
|
|
}
|
|
if (this.root) {
|
|
throw new Error("dtd() must come before the root node.");
|
|
}
|
|
this.currentNode = new XMLDocType(this, pubID, sysID);
|
|
this.currentNode.rootNodeName = root;
|
|
this.currentNode.children = false;
|
|
this.currentLevel++;
|
|
this.openTags[this.currentLevel] = this.currentNode;
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dtdElement = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDElement(this, name, value);
|
|
this.onData(this.writer.dtdElement(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
this.onData(this.writer.dtdAttList(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.entity = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDEntity(this, false, name, value);
|
|
this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.pEntity = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDEntity(this, true, name, value);
|
|
this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.notation = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDNotation(this, name, value);
|
|
this.onData(this.writer.dtdNotation(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.up = function() {
|
|
if (this.currentLevel < 0) {
|
|
throw new Error("The document node has no parent.");
|
|
}
|
|
if (this.currentNode) {
|
|
if (this.currentNode.children) {
|
|
this.closeNode(this.currentNode);
|
|
} else {
|
|
this.openNode(this.currentNode);
|
|
}
|
|
this.currentNode = null;
|
|
} else {
|
|
this.closeNode(this.openTags[this.currentLevel]);
|
|
}
|
|
delete this.openTags[this.currentLevel];
|
|
this.currentLevel--;
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.end = function() {
|
|
while (this.currentLevel >= 0) {
|
|
this.up();
|
|
}
|
|
return this.onEnd();
|
|
};
|
|
|
|
XMLDocumentCB.prototype.openCurrent = function() {
|
|
if (this.currentNode) {
|
|
this.currentNode.children = true;
|
|
return this.openNode(this.currentNode);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.openNode = function(node) {
|
|
var att, chunk, name, ref1;
|
|
if (!node.isOpen) {
|
|
if (!this.root && this.currentLevel === 0 && node.type === NodeType.Element) {
|
|
this.root = node;
|
|
}
|
|
chunk = '';
|
|
if (node.type === NodeType.Element) {
|
|
this.writerOptions.state = WriterState.OpenTag;
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<' + node.name;
|
|
ref1 = node.attribs;
|
|
for (name in ref1) {
|
|
if (!hasProp.call(ref1, name)) continue;
|
|
att = ref1[name];
|
|
chunk += this.writer.attribute(att, this.writerOptions, this.currentLevel);
|
|
}
|
|
chunk += (node.children ? '>' : '/>') + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
this.writerOptions.state = WriterState.InsideTag;
|
|
} else {
|
|
this.writerOptions.state = WriterState.OpenTag;
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<!DOCTYPE ' + node.rootNodeName;
|
|
if (node.pubID && node.sysID) {
|
|
chunk += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
chunk += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.children) {
|
|
chunk += ' [';
|
|
this.writerOptions.state = WriterState.InsideTag;
|
|
} else {
|
|
this.writerOptions.state = WriterState.CloseTag;
|
|
chunk += '>';
|
|
}
|
|
chunk += this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
}
|
|
this.onData(chunk, this.currentLevel);
|
|
return node.isOpen = true;
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.closeNode = function(node) {
|
|
var chunk;
|
|
if (!node.isClosed) {
|
|
chunk = '';
|
|
this.writerOptions.state = WriterState.CloseTag;
|
|
if (node.type === NodeType.Element) {
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '</' + node.name + '>' + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
} else {
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + ']>' + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
}
|
|
this.writerOptions.state = WriterState.None;
|
|
this.onData(chunk, this.currentLevel);
|
|
return node.isClosed = true;
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.onData = function(chunk, level) {
|
|
this.documentStarted = true;
|
|
return this.onDataCallback(chunk, level + 1);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.onEnd = function() {
|
|
this.documentCompleted = true;
|
|
return this.onEndCallback();
|
|
};
|
|
|
|
XMLDocumentCB.prototype.debugInfo = function(name) {
|
|
if (name == null) {
|
|
return "";
|
|
} else {
|
|
return "node: <" + name + ">";
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ele = function() {
|
|
return this.element.apply(this, arguments);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.nod = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.txt = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dat = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.com = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ins = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {
|
|
return this.declaration(version, encoding, standalone);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {
|
|
return this.doctype(root, pubID, sysID);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.e = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.n = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.t = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.d = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.c = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.r = function(value) {
|
|
return this.raw(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.i = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.att = function() {
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
return this.attList.apply(this, arguments);
|
|
} else {
|
|
return this.attribute.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.a = function() {
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
return this.attList.apply(this, arguments);
|
|
} else {
|
|
return this.attribute.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ent = function(name, value) {
|
|
return this.entity(name, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.pent = function(name, value) {
|
|
return this.pEntity(name, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.not = function(name, value) {
|
|
return this.notation(name, value);
|
|
};
|
|
|
|
return XMLDocumentCB;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3590:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDummy, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
module.exports = XMLDummy = (function(superClass) {
|
|
extend(XMLDummy, superClass);
|
|
|
|
function XMLDummy(parent) {
|
|
XMLDummy.__super__.constructor.call(this, parent);
|
|
this.type = NodeType.Dummy;
|
|
}
|
|
|
|
XMLDummy.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLDummy.prototype.toString = function(options) {
|
|
return '';
|
|
};
|
|
|
|
return XMLDummy;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9437:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref = __nccwpck_require__(8229), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLAttribute = __nccwpck_require__(8376);
|
|
|
|
XMLNamedNodeMap = __nccwpck_require__(4361);
|
|
|
|
module.exports = XMLElement = (function(superClass) {
|
|
extend(XMLElement, superClass);
|
|
|
|
function XMLElement(parent, name, attributes) {
|
|
var child, j, len, ref1;
|
|
XMLElement.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing element name. " + this.debugInfo());
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.Element;
|
|
this.attribs = {};
|
|
this.schemaTypeInfo = null;
|
|
if (attributes != null) {
|
|
this.attribute(attributes);
|
|
}
|
|
if (parent.type === NodeType.Document) {
|
|
this.isRoot = true;
|
|
this.documentObject = parent;
|
|
parent.rootObject = this;
|
|
if (parent.children) {
|
|
ref1 = parent.children;
|
|
for (j = 0, len = ref1.length; j < len; j++) {
|
|
child = ref1[j];
|
|
if (child.type === NodeType.DocType) {
|
|
child.name = this.name;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'tagName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'namespaceURI', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'prefix', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'localName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'id', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'className', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'classList', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'attributes', {
|
|
get: function() {
|
|
if (!this.attributeMap || !this.attributeMap.nodes) {
|
|
this.attributeMap = new XMLNamedNodeMap(this.attribs);
|
|
}
|
|
return this.attributeMap;
|
|
}
|
|
});
|
|
|
|
XMLElement.prototype.clone = function() {
|
|
var att, attName, clonedSelf, ref1;
|
|
clonedSelf = Object.create(this);
|
|
if (clonedSelf.isRoot) {
|
|
clonedSelf.documentObject = null;
|
|
}
|
|
clonedSelf.attribs = {};
|
|
ref1 = this.attribs;
|
|
for (attName in ref1) {
|
|
if (!hasProp.call(ref1, attName)) continue;
|
|
att = ref1[attName];
|
|
clonedSelf.attribs[attName] = att.clone();
|
|
}
|
|
clonedSelf.children = [];
|
|
this.children.forEach(function(child) {
|
|
var clonedChild;
|
|
clonedChild = child.clone();
|
|
clonedChild.parent = clonedSelf;
|
|
return clonedSelf.children.push(clonedChild);
|
|
});
|
|
return clonedSelf;
|
|
};
|
|
|
|
XMLElement.prototype.attribute = function(name, value) {
|
|
var attName, attValue;
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (isObject(name)) {
|
|
for (attName in name) {
|
|
if (!hasProp.call(name, attName)) continue;
|
|
attValue = name[attName];
|
|
this.attribute(attName, attValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
if (this.options.keepNullAttributes && (value == null)) {
|
|
this.attribs[name] = new XMLAttribute(this, name, "");
|
|
} else if (value != null) {
|
|
this.attribs[name] = new XMLAttribute(this, name, value);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLElement.prototype.removeAttribute = function(name) {
|
|
var attName, j, len;
|
|
if (name == null) {
|
|
throw new Error("Missing attribute name. " + this.debugInfo());
|
|
}
|
|
name = getValue(name);
|
|
if (Array.isArray(name)) {
|
|
for (j = 0, len = name.length; j < len; j++) {
|
|
attName = name[j];
|
|
delete this.attribs[attName];
|
|
}
|
|
} else {
|
|
delete this.attribs[name];
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLElement.prototype.toString = function(options) {
|
|
return this.options.writer.element(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLElement.prototype.att = function(name, value) {
|
|
return this.attribute(name, value);
|
|
};
|
|
|
|
XMLElement.prototype.a = function(name, value) {
|
|
return this.attribute(name, value);
|
|
};
|
|
|
|
XMLElement.prototype.getAttribute = function(name) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name].value;
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setAttribute = function(name, value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNode = function(name) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNode = function(newAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.removeAttributeNode = function(oldAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagName = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNodeNS = function(newAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.hasAttribute = function(name) {
|
|
return this.attribs.hasOwnProperty(name);
|
|
};
|
|
|
|
XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttribute = function(name, isId) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name].isId;
|
|
} else {
|
|
return isId;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagName = function(tagname) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByClassName = function(classNames) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.isEqualNode = function(node) {
|
|
var i, j, ref1;
|
|
if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.namespaceURI !== this.namespaceURI) {
|
|
return false;
|
|
}
|
|
if (node.prefix !== this.prefix) {
|
|
return false;
|
|
}
|
|
if (node.localName !== this.localName) {
|
|
return false;
|
|
}
|
|
if (node.attribs.length !== this.attribs.length) {
|
|
return false;
|
|
}
|
|
for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {
|
|
if (!this.attribs[i].isEqualNode(node.attribs[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLElement;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4361:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLNamedNodeMap;
|
|
|
|
module.exports = XMLNamedNodeMap = (function() {
|
|
function XMLNamedNodeMap(nodes) {
|
|
this.nodes = nodes;
|
|
}
|
|
|
|
Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {
|
|
get: function() {
|
|
return Object.keys(this.nodes).length || 0;
|
|
}
|
|
});
|
|
|
|
XMLNamedNodeMap.prototype.clone = function() {
|
|
return this.nodes = null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.getNamedItem = function(name) {
|
|
return this.nodes[name];
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.setNamedItem = function(node) {
|
|
var oldNode;
|
|
oldNode = this.nodes[node.nodeName];
|
|
this.nodes[node.nodeName] = node;
|
|
return oldNode || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.removeNamedItem = function(name) {
|
|
var oldNode;
|
|
oldNode = this.nodes[name];
|
|
delete this.nodes[name];
|
|
return oldNode || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.item = function(index) {
|
|
return this.nodes[Object.keys(this.nodes)[index]] || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
return XMLNamedNodeMap;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7608:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref1 = __nccwpck_require__(8229), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;
|
|
|
|
XMLElement = null;
|
|
|
|
XMLCData = null;
|
|
|
|
XMLComment = null;
|
|
|
|
XMLDeclaration = null;
|
|
|
|
XMLDocType = null;
|
|
|
|
XMLRaw = null;
|
|
|
|
XMLText = null;
|
|
|
|
XMLProcessingInstruction = null;
|
|
|
|
XMLDummy = null;
|
|
|
|
NodeType = null;
|
|
|
|
XMLNodeList = null;
|
|
|
|
XMLNamedNodeMap = null;
|
|
|
|
DocumentPosition = null;
|
|
|
|
module.exports = XMLNode = (function() {
|
|
function XMLNode(parent1) {
|
|
this.parent = parent1;
|
|
if (this.parent) {
|
|
this.options = this.parent.options;
|
|
this.stringify = this.parent.stringify;
|
|
}
|
|
this.value = null;
|
|
this.children = [];
|
|
this.baseURI = null;
|
|
if (!XMLElement) {
|
|
XMLElement = __nccwpck_require__(9437);
|
|
XMLCData = __nccwpck_require__(333);
|
|
XMLComment = __nccwpck_require__(4407);
|
|
XMLDeclaration = __nccwpck_require__(6364);
|
|
XMLDocType = __nccwpck_require__(1801);
|
|
XMLRaw = __nccwpck_require__(6329);
|
|
XMLText = __nccwpck_require__(1318);
|
|
XMLProcessingInstruction = __nccwpck_require__(6939);
|
|
XMLDummy = __nccwpck_require__(3590);
|
|
NodeType = __nccwpck_require__(9267);
|
|
XMLNodeList = __nccwpck_require__(6768);
|
|
XMLNamedNodeMap = __nccwpck_require__(4361);
|
|
DocumentPosition = __nccwpck_require__(2839);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeType', {
|
|
get: function() {
|
|
return this.type;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeValue', {
|
|
get: function() {
|
|
return this.value;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'parentNode', {
|
|
get: function() {
|
|
return this.parent;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'childNodes', {
|
|
get: function() {
|
|
if (!this.childNodeList || !this.childNodeList.nodes) {
|
|
this.childNodeList = new XMLNodeList(this.children);
|
|
}
|
|
return this.childNodeList;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'firstChild', {
|
|
get: function() {
|
|
return this.children[0] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'lastChild', {
|
|
get: function() {
|
|
return this.children[this.children.length - 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'previousSibling', {
|
|
get: function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
return this.parent.children[i - 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nextSibling', {
|
|
get: function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
return this.parent.children[i + 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'ownerDocument', {
|
|
get: function() {
|
|
return this.document() || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'textContent', {
|
|
get: function() {
|
|
var child, j, len, ref2, str;
|
|
if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {
|
|
str = '';
|
|
ref2 = this.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (child.textContent) {
|
|
str += child.textContent;
|
|
}
|
|
}
|
|
return str;
|
|
} else {
|
|
return null;
|
|
}
|
|
},
|
|
set: function(value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
XMLNode.prototype.setParent = function(parent) {
|
|
var child, j, len, ref2, results;
|
|
this.parent = parent;
|
|
if (parent) {
|
|
this.options = parent.options;
|
|
this.stringify = parent.stringify;
|
|
}
|
|
ref2 = this.children;
|
|
results = [];
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
results.push(child.setParent(this));
|
|
}
|
|
return results;
|
|
};
|
|
|
|
XMLNode.prototype.element = function(name, attributes, text) {
|
|
var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;
|
|
lastChild = null;
|
|
if (attributes === null && (text == null)) {
|
|
ref2 = [{}, null], attributes = ref2[0], text = ref2[1];
|
|
}
|
|
if (attributes == null) {
|
|
attributes = {};
|
|
}
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];
|
|
}
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (Array.isArray(name)) {
|
|
for (j = 0, len = name.length; j < len; j++) {
|
|
item = name[j];
|
|
lastChild = this.element(item);
|
|
}
|
|
} else if (isFunction(name)) {
|
|
lastChild = this.element(name.apply());
|
|
} else if (isObject(name)) {
|
|
for (key in name) {
|
|
if (!hasProp.call(name, key)) continue;
|
|
val = name[key];
|
|
if (isFunction(val)) {
|
|
val = val.apply();
|
|
}
|
|
if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
|
|
lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
|
|
} else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {
|
|
lastChild = this.dummy();
|
|
} else if (isObject(val) && isEmpty(val)) {
|
|
lastChild = this.element(key);
|
|
} else if (!this.options.keepNullNodes && (val == null)) {
|
|
lastChild = this.dummy();
|
|
} else if (!this.options.separateArrayItems && Array.isArray(val)) {
|
|
for (k = 0, len1 = val.length; k < len1; k++) {
|
|
item = val[k];
|
|
childNode = {};
|
|
childNode[key] = item;
|
|
lastChild = this.element(childNode);
|
|
}
|
|
} else if (isObject(val)) {
|
|
if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {
|
|
lastChild = this.element(val);
|
|
} else {
|
|
lastChild = this.element(key);
|
|
lastChild.element(val);
|
|
}
|
|
} else {
|
|
lastChild = this.element(key, val);
|
|
}
|
|
}
|
|
} else if (!this.options.keepNullNodes && text === null) {
|
|
lastChild = this.dummy();
|
|
} else {
|
|
if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
|
|
lastChild = this.text(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
|
|
lastChild = this.cdata(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
|
|
lastChild = this.comment(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
|
|
lastChild = this.raw(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {
|
|
lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);
|
|
} else {
|
|
lastChild = this.node(name, attributes, text);
|
|
}
|
|
}
|
|
if (lastChild == null) {
|
|
throw new Error("Could not create any elements with: " + name + ". " + this.debugInfo());
|
|
}
|
|
return lastChild;
|
|
};
|
|
|
|
XMLNode.prototype.insertBefore = function(name, attributes, text) {
|
|
var child, i, newChild, refChild, removed;
|
|
if (name != null ? name.type : void 0) {
|
|
newChild = name;
|
|
refChild = attributes;
|
|
newChild.setParent(this);
|
|
if (refChild) {
|
|
i = children.indexOf(refChild);
|
|
removed = children.splice(i);
|
|
children.push(newChild);
|
|
Array.prototype.push.apply(children, removed);
|
|
} else {
|
|
children.push(newChild);
|
|
}
|
|
return newChild;
|
|
} else {
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.element(name, attributes, text);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return child;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.insertAfter = function(name, attributes, text) {
|
|
var child, i, removed;
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.element(name, attributes, text);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.remove = function() {
|
|
var i, ref2;
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot remove the root element. " + this.debugInfo());
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
[].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;
|
|
return this.parent;
|
|
};
|
|
|
|
XMLNode.prototype.node = function(name, attributes, text) {
|
|
var child, ref2;
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
attributes || (attributes = {});
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];
|
|
}
|
|
child = new XMLElement(this, name, attributes);
|
|
if (text != null) {
|
|
child.text(text);
|
|
}
|
|
this.children.push(child);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.text = function(value) {
|
|
var child;
|
|
if (isObject(value)) {
|
|
this.element(value);
|
|
}
|
|
child = new XMLText(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.cdata = function(value) {
|
|
var child;
|
|
child = new XMLCData(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.comment = function(value) {
|
|
var child;
|
|
child = new XMLComment(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.commentBefore = function(value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.comment(value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.commentAfter = function(value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.comment(value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.raw = function(value) {
|
|
var child;
|
|
child = new XMLRaw(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.dummy = function() {
|
|
var child;
|
|
child = new XMLDummy(this);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.instruction = function(target, value) {
|
|
var insTarget, insValue, instruction, j, len;
|
|
if (target != null) {
|
|
target = getValue(target);
|
|
}
|
|
if (value != null) {
|
|
value = getValue(value);
|
|
}
|
|
if (Array.isArray(target)) {
|
|
for (j = 0, len = target.length; j < len; j++) {
|
|
insTarget = target[j];
|
|
this.instruction(insTarget);
|
|
}
|
|
} else if (isObject(target)) {
|
|
for (insTarget in target) {
|
|
if (!hasProp.call(target, insTarget)) continue;
|
|
insValue = target[insTarget];
|
|
this.instruction(insTarget, insValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
instruction = new XMLProcessingInstruction(this, target, value);
|
|
this.children.push(instruction);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.instructionBefore = function(target, value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.instruction(target, value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.instructionAfter = function(target, value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.instruction(target, value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.declaration = function(version, encoding, standalone) {
|
|
var doc, xmldec;
|
|
doc = this.document();
|
|
xmldec = new XMLDeclaration(doc, version, encoding, standalone);
|
|
if (doc.children.length === 0) {
|
|
doc.children.unshift(xmldec);
|
|
} else if (doc.children[0].type === NodeType.Declaration) {
|
|
doc.children[0] = xmldec;
|
|
} else {
|
|
doc.children.unshift(xmldec);
|
|
}
|
|
return doc.root() || doc;
|
|
};
|
|
|
|
XMLNode.prototype.dtd = function(pubID, sysID) {
|
|
var child, doc, doctype, i, j, k, len, len1, ref2, ref3;
|
|
doc = this.document();
|
|
doctype = new XMLDocType(doc, pubID, sysID);
|
|
ref2 = doc.children;
|
|
for (i = j = 0, len = ref2.length; j < len; i = ++j) {
|
|
child = ref2[i];
|
|
if (child.type === NodeType.DocType) {
|
|
doc.children[i] = doctype;
|
|
return doctype;
|
|
}
|
|
}
|
|
ref3 = doc.children;
|
|
for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {
|
|
child = ref3[i];
|
|
if (child.isRoot) {
|
|
doc.children.splice(i, 0, doctype);
|
|
return doctype;
|
|
}
|
|
}
|
|
doc.children.push(doctype);
|
|
return doctype;
|
|
};
|
|
|
|
XMLNode.prototype.up = function() {
|
|
if (this.isRoot) {
|
|
throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
|
|
}
|
|
return this.parent;
|
|
};
|
|
|
|
XMLNode.prototype.root = function() {
|
|
var node;
|
|
node = this;
|
|
while (node) {
|
|
if (node.type === NodeType.Document) {
|
|
return node.rootObject;
|
|
} else if (node.isRoot) {
|
|
return node;
|
|
} else {
|
|
node = node.parent;
|
|
}
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.document = function() {
|
|
var node;
|
|
node = this;
|
|
while (node) {
|
|
if (node.type === NodeType.Document) {
|
|
return node;
|
|
} else {
|
|
node = node.parent;
|
|
}
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.end = function(options) {
|
|
return this.document().end(options);
|
|
};
|
|
|
|
XMLNode.prototype.prev = function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
if (i < 1) {
|
|
throw new Error("Already at the first node. " + this.debugInfo());
|
|
}
|
|
return this.parent.children[i - 1];
|
|
};
|
|
|
|
XMLNode.prototype.next = function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
if (i === -1 || i === this.parent.children.length - 1) {
|
|
throw new Error("Already at the last node. " + this.debugInfo());
|
|
}
|
|
return this.parent.children[i + 1];
|
|
};
|
|
|
|
XMLNode.prototype.importDocument = function(doc) {
|
|
var clonedRoot;
|
|
clonedRoot = doc.root().clone();
|
|
clonedRoot.parent = this;
|
|
clonedRoot.isRoot = false;
|
|
this.children.push(clonedRoot);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.debugInfo = function(name) {
|
|
var ref2, ref3;
|
|
name = name || this.name;
|
|
if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {
|
|
return "";
|
|
} else if (name == null) {
|
|
return "parent: <" + this.parent.name + ">";
|
|
} else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {
|
|
return "node: <" + name + ">";
|
|
} else {
|
|
return "node: <" + name + ">, parent: <" + this.parent.name + ">";
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.ele = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.nod = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.txt = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLNode.prototype.dat = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLNode.prototype.com = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLNode.prototype.ins = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLNode.prototype.doc = function() {
|
|
return this.document();
|
|
};
|
|
|
|
XMLNode.prototype.dec = function(version, encoding, standalone) {
|
|
return this.declaration(version, encoding, standalone);
|
|
};
|
|
|
|
XMLNode.prototype.e = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.n = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.t = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLNode.prototype.d = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLNode.prototype.c = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLNode.prototype.r = function(value) {
|
|
return this.raw(value);
|
|
};
|
|
|
|
XMLNode.prototype.i = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLNode.prototype.u = function() {
|
|
return this.up();
|
|
};
|
|
|
|
XMLNode.prototype.importXMLBuilder = function(doc) {
|
|
return this.importDocument(doc);
|
|
};
|
|
|
|
XMLNode.prototype.replaceChild = function(newChild, oldChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.removeChild = function(oldChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.appendChild = function(newChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.hasChildNodes = function() {
|
|
return this.children.length !== 0;
|
|
};
|
|
|
|
XMLNode.prototype.cloneNode = function(deep) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.normalize = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isSupported = function(feature, version) {
|
|
return true;
|
|
};
|
|
|
|
XMLNode.prototype.hasAttributes = function() {
|
|
return this.attribs.length !== 0;
|
|
};
|
|
|
|
XMLNode.prototype.compareDocumentPosition = function(other) {
|
|
var ref, res;
|
|
ref = this;
|
|
if (ref === other) {
|
|
return 0;
|
|
} else if (this.document() !== other.document()) {
|
|
res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;
|
|
if (Math.random() < 0.5) {
|
|
res |= DocumentPosition.Preceding;
|
|
} else {
|
|
res |= DocumentPosition.Following;
|
|
}
|
|
return res;
|
|
} else if (ref.isAncestor(other)) {
|
|
return DocumentPosition.Contains | DocumentPosition.Preceding;
|
|
} else if (ref.isDescendant(other)) {
|
|
return DocumentPosition.Contains | DocumentPosition.Following;
|
|
} else if (ref.isPreceding(other)) {
|
|
return DocumentPosition.Preceding;
|
|
} else {
|
|
return DocumentPosition.Following;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.isSameNode = function(other) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.lookupPrefix = function(namespaceURI) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.lookupNamespaceURI = function(prefix) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isEqualNode = function(node) {
|
|
var i, j, ref2;
|
|
if (node.nodeType !== this.nodeType) {
|
|
return false;
|
|
}
|
|
if (node.children.length !== this.children.length) {
|
|
return false;
|
|
}
|
|
for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {
|
|
if (!this.children[i].isEqualNode(node.children[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
XMLNode.prototype.getFeature = function(feature, version) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.setUserData = function(key, data, handler) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.getUserData = function(key) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.contains = function(other) {
|
|
if (!other) {
|
|
return false;
|
|
}
|
|
return other === this || this.isDescendant(other);
|
|
};
|
|
|
|
XMLNode.prototype.isDescendant = function(node) {
|
|
var child, isDescendantChild, j, len, ref2;
|
|
ref2 = this.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (node === child) {
|
|
return true;
|
|
}
|
|
isDescendantChild = child.isDescendant(node);
|
|
if (isDescendantChild) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
XMLNode.prototype.isAncestor = function(node) {
|
|
return node.isDescendant(this);
|
|
};
|
|
|
|
XMLNode.prototype.isPreceding = function(node) {
|
|
var nodePos, thisPos;
|
|
nodePos = this.treePosition(node);
|
|
thisPos = this.treePosition(this);
|
|
if (nodePos === -1 || thisPos === -1) {
|
|
return false;
|
|
} else {
|
|
return nodePos < thisPos;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.isFollowing = function(node) {
|
|
var nodePos, thisPos;
|
|
nodePos = this.treePosition(node);
|
|
thisPos = this.treePosition(this);
|
|
if (nodePos === -1 || thisPos === -1) {
|
|
return false;
|
|
} else {
|
|
return nodePos > thisPos;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.treePosition = function(node) {
|
|
var found, pos;
|
|
pos = 0;
|
|
found = false;
|
|
this.foreachTreeNode(this.document(), function(childNode) {
|
|
pos++;
|
|
if (!found && childNode === node) {
|
|
return found = true;
|
|
}
|
|
});
|
|
if (found) {
|
|
return pos;
|
|
} else {
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.foreachTreeNode = function(node, func) {
|
|
var child, j, len, ref2, res;
|
|
node || (node = this.document());
|
|
ref2 = node.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (res = func(child)) {
|
|
return res;
|
|
} else {
|
|
res = this.foreachTreeNode(child, func);
|
|
if (res) {
|
|
return res;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
return XMLNode;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6768:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLNodeList;
|
|
|
|
module.exports = XMLNodeList = (function() {
|
|
function XMLNodeList(nodes) {
|
|
this.nodes = nodes;
|
|
}
|
|
|
|
Object.defineProperty(XMLNodeList.prototype, 'length', {
|
|
get: function() {
|
|
return this.nodes.length || 0;
|
|
}
|
|
});
|
|
|
|
XMLNodeList.prototype.clone = function() {
|
|
return this.nodes = null;
|
|
};
|
|
|
|
XMLNodeList.prototype.item = function(index) {
|
|
return this.nodes[index] || null;
|
|
};
|
|
|
|
return XMLNodeList;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6939:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLProcessingInstruction,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLCharacterData = __nccwpck_require__(7709);
|
|
|
|
module.exports = XMLProcessingInstruction = (function(superClass) {
|
|
extend(XMLProcessingInstruction, superClass);
|
|
|
|
function XMLProcessingInstruction(parent, target, value) {
|
|
XMLProcessingInstruction.__super__.constructor.call(this, parent);
|
|
if (target == null) {
|
|
throw new Error("Missing instruction target. " + this.debugInfo());
|
|
}
|
|
this.type = NodeType.ProcessingInstruction;
|
|
this.target = this.stringify.insTarget(target);
|
|
this.name = this.target;
|
|
if (value) {
|
|
this.value = this.stringify.insValue(value);
|
|
}
|
|
}
|
|
|
|
XMLProcessingInstruction.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLProcessingInstruction.prototype.toString = function(options) {
|
|
return this.options.writer.processingInstruction(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLProcessingInstruction.prototype.isEqualNode = function(node) {
|
|
if (!XMLProcessingInstruction.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.target !== this.target) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLProcessingInstruction;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6329:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLNode, XMLRaw,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLNode = __nccwpck_require__(7608);
|
|
|
|
module.exports = XMLRaw = (function(superClass) {
|
|
extend(XMLRaw, superClass);
|
|
|
|
function XMLRaw(parent, text) {
|
|
XMLRaw.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing raw text. " + this.debugInfo());
|
|
}
|
|
this.type = NodeType.Raw;
|
|
this.value = this.stringify.raw(text);
|
|
}
|
|
|
|
XMLRaw.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLRaw.prototype.toString = function(options) {
|
|
return this.options.writer.raw(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLRaw;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8601:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLStreamWriter, XMLWriterBase,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLWriterBase = __nccwpck_require__(6752);
|
|
|
|
WriterState = __nccwpck_require__(9766);
|
|
|
|
module.exports = XMLStreamWriter = (function(superClass) {
|
|
extend(XMLStreamWriter, superClass);
|
|
|
|
function XMLStreamWriter(stream, options) {
|
|
this.stream = stream;
|
|
XMLStreamWriter.__super__.constructor.call(this, options);
|
|
}
|
|
|
|
XMLStreamWriter.prototype.endline = function(node, options, level) {
|
|
if (node.isLastRootNode && options.state === WriterState.CloseTag) {
|
|
return '';
|
|
} else {
|
|
return XMLStreamWriter.__super__.endline.call(this, node, options, level);
|
|
}
|
|
};
|
|
|
|
XMLStreamWriter.prototype.document = function(doc, options) {
|
|
var child, i, j, k, len, len1, ref, ref1, results;
|
|
ref = doc.children;
|
|
for (i = j = 0, len = ref.length; j < len; i = ++j) {
|
|
child = ref[i];
|
|
child.isLastRootNode = i === doc.children.length - 1;
|
|
}
|
|
options = this.filterOptions(options);
|
|
ref1 = doc.children;
|
|
results = [];
|
|
for (k = 0, len1 = ref1.length; k < len1; k++) {
|
|
child = ref1[k];
|
|
results.push(this.writeChildNode(child, options, 0));
|
|
}
|
|
return results;
|
|
};
|
|
|
|
XMLStreamWriter.prototype.attribute = function(att, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.attribute.call(this, att, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.cdata = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.cdata.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.comment = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.comment.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.declaration = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.declaration.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.docType = function(node, options, level) {
|
|
var child, j, len, ref;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
this.stream.write(this.indent(node, options, level));
|
|
this.stream.write('<!DOCTYPE ' + node.root().name);
|
|
if (node.pubID && node.sysID) {
|
|
this.stream.write(' PUBLIC "' + node.pubID + '" "' + node.sysID + '"');
|
|
} else if (node.sysID) {
|
|
this.stream.write(' SYSTEM "' + node.sysID + '"');
|
|
}
|
|
if (node.children.length > 0) {
|
|
this.stream.write(' [');
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.InsideTag;
|
|
ref = node.children;
|
|
for (j = 0, len = ref.length; j < len; j++) {
|
|
child = ref[j];
|
|
this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(']');
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(options.spaceBeforeSlash + '>');
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.None;
|
|
return this.closeNode(node, options, level);
|
|
};
|
|
|
|
XMLStreamWriter.prototype.element = function(node, options, level) {
|
|
var att, child, childNodeCount, firstChildNode, j, len, name, prettySuppressed, ref, ref1;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
this.stream.write(this.indent(node, options, level) + '<' + node.name);
|
|
ref = node.attribs;
|
|
for (name in ref) {
|
|
if (!hasProp.call(ref, name)) continue;
|
|
att = ref[name];
|
|
this.attribute(att, options, level);
|
|
}
|
|
childNodeCount = node.children.length;
|
|
firstChildNode = childNodeCount === 0 ? null : node.children[0];
|
|
if (childNodeCount === 0 || node.children.every(function(e) {
|
|
return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';
|
|
})) {
|
|
if (options.allowEmpty) {
|
|
this.stream.write('>');
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write('</' + node.name + '>');
|
|
} else {
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(options.spaceBeforeSlash + '/>');
|
|
}
|
|
} else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {
|
|
this.stream.write('>');
|
|
options.state = WriterState.InsideTag;
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
this.writeChildNode(firstChildNode, options, level + 1);
|
|
options.suppressPrettyCount--;
|
|
prettySuppressed = false;
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write('</' + node.name + '>');
|
|
} else {
|
|
this.stream.write('>' + this.endline(node, options, level));
|
|
options.state = WriterState.InsideTag;
|
|
ref1 = node.children;
|
|
for (j = 0, len = ref1.length; j < len; j++) {
|
|
child = ref1[j];
|
|
this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(this.indent(node, options, level) + '</' + node.name + '>');
|
|
}
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.None;
|
|
return this.closeNode(node, options, level);
|
|
};
|
|
|
|
XMLStreamWriter.prototype.processingInstruction = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.processingInstruction.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.raw = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.raw.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.text = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.text.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdAttList = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdAttList.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdElement = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdElement.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdEntity = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdEntity.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdNotation = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdNotation.call(this, node, options, level));
|
|
};
|
|
|
|
return XMLStreamWriter;
|
|
|
|
})(XMLWriterBase);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5913:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLStringWriter, XMLWriterBase,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLWriterBase = __nccwpck_require__(6752);
|
|
|
|
module.exports = XMLStringWriter = (function(superClass) {
|
|
extend(XMLStringWriter, superClass);
|
|
|
|
function XMLStringWriter(options) {
|
|
XMLStringWriter.__super__.constructor.call(this, options);
|
|
}
|
|
|
|
XMLStringWriter.prototype.document = function(doc, options) {
|
|
var child, i, len, r, ref;
|
|
options = this.filterOptions(options);
|
|
r = '';
|
|
ref = doc.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
r += this.writeChildNode(child, options, 0);
|
|
}
|
|
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
|
r = r.slice(0, -options.newline.length);
|
|
}
|
|
return r;
|
|
};
|
|
|
|
return XMLStringWriter;
|
|
|
|
})(XMLWriterBase);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8594:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLStringifier,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
module.exports = XMLStringifier = (function() {
|
|
function XMLStringifier(options) {
|
|
this.assertLegalName = bind(this.assertLegalName, this);
|
|
this.assertLegalChar = bind(this.assertLegalChar, this);
|
|
var key, ref, value;
|
|
options || (options = {});
|
|
this.options = options;
|
|
if (!this.options.version) {
|
|
this.options.version = '1.0';
|
|
}
|
|
ref = options.stringify || {};
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this[key] = value;
|
|
}
|
|
}
|
|
|
|
XMLStringifier.prototype.name = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalName('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.text = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar(this.textEscape('' + val || ''));
|
|
};
|
|
|
|
XMLStringifier.prototype.cdata = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
val = val.replace(']]>', ']]]]><![CDATA[>');
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.comment = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (val.match(/--/)) {
|
|
throw new Error("Comment text cannot contain double-hypen: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.raw = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return '' + val || '';
|
|
};
|
|
|
|
XMLStringifier.prototype.attValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar(this.attEscape(val = '' + val || ''));
|
|
};
|
|
|
|
XMLStringifier.prototype.insTarget = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.insValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (val.match(/\?>/)) {
|
|
throw new Error("Invalid processing instruction value: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlVersion = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (!val.match(/1\.[0-9]+/)) {
|
|
throw new Error("Invalid version number: " + val);
|
|
}
|
|
return val;
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlEncoding = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {
|
|
throw new Error("Invalid encoding: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlStandalone = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
if (val) {
|
|
return "yes";
|
|
} else {
|
|
return "no";
|
|
}
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdPubID = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdSysID = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdElementValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdAttType = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdAttDefault = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdEntityValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdNData = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.convertAttKey = '@';
|
|
|
|
XMLStringifier.prototype.convertPIKey = '?';
|
|
|
|
XMLStringifier.prototype.convertTextKey = '#text';
|
|
|
|
XMLStringifier.prototype.convertCDataKey = '#cdata';
|
|
|
|
XMLStringifier.prototype.convertCommentKey = '#comment';
|
|
|
|
XMLStringifier.prototype.convertRawKey = '#raw';
|
|
|
|
XMLStringifier.prototype.assertLegalChar = function(str) {
|
|
var regex, res;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
regex = '';
|
|
if (this.options.version === '1.0') {
|
|
regex = /[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|
if (res = str.match(regex)) {
|
|
throw new Error("Invalid character in string: " + str + " at index " + res.index);
|
|
}
|
|
} else if (this.options.version === '1.1') {
|
|
regex = /[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|
if (res = str.match(regex)) {
|
|
throw new Error("Invalid character in string: " + str + " at index " + res.index);
|
|
}
|
|
}
|
|
return str;
|
|
};
|
|
|
|
XMLStringifier.prototype.assertLegalName = function(str) {
|
|
var regex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
this.assertLegalChar(str);
|
|
regex = /^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/;
|
|
if (!str.match(regex)) {
|
|
throw new Error("Invalid character in name");
|
|
}
|
|
return str;
|
|
};
|
|
|
|
XMLStringifier.prototype.textEscape = function(str) {
|
|
var ampregex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\r/g, '
');
|
|
};
|
|
|
|
XMLStringifier.prototype.attEscape = function(str) {
|
|
var ampregex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/"/g, '"').replace(/\t/g, '	').replace(/\n/g, '
').replace(/\r/g, '
');
|
|
};
|
|
|
|
return XMLStringifier;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1318:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLText,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLCharacterData = __nccwpck_require__(7709);
|
|
|
|
module.exports = XMLText = (function(superClass) {
|
|
extend(XMLText, superClass);
|
|
|
|
function XMLText(parent, text) {
|
|
XMLText.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing element text. " + this.debugInfo());
|
|
}
|
|
this.name = "#text";
|
|
this.type = NodeType.Text;
|
|
this.value = this.stringify.text(text);
|
|
}
|
|
|
|
Object.defineProperty(XMLText.prototype, 'isElementContentWhitespace', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLText.prototype, 'wholeText', {
|
|
get: function() {
|
|
var next, prev, str;
|
|
str = '';
|
|
prev = this.previousSibling;
|
|
while (prev) {
|
|
str = prev.data + str;
|
|
prev = prev.previousSibling;
|
|
}
|
|
str += this.data;
|
|
next = this.nextSibling;
|
|
while (next) {
|
|
str = str + next.data;
|
|
next = next.nextSibling;
|
|
}
|
|
return str;
|
|
}
|
|
});
|
|
|
|
XMLText.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLText.prototype.toString = function(options) {
|
|
return this.options.writer.text(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLText.prototype.splitText = function(offset) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLText.prototype.replaceWholeText = function(content) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
return XMLText;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6752:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
assign = (__nccwpck_require__(8229).assign);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
XMLDeclaration = __nccwpck_require__(6364);
|
|
|
|
XMLDocType = __nccwpck_require__(1801);
|
|
|
|
XMLCData = __nccwpck_require__(333);
|
|
|
|
XMLComment = __nccwpck_require__(4407);
|
|
|
|
XMLElement = __nccwpck_require__(9437);
|
|
|
|
XMLRaw = __nccwpck_require__(6329);
|
|
|
|
XMLText = __nccwpck_require__(1318);
|
|
|
|
XMLProcessingInstruction = __nccwpck_require__(6939);
|
|
|
|
XMLDummy = __nccwpck_require__(3590);
|
|
|
|
XMLDTDAttList = __nccwpck_require__(1015);
|
|
|
|
XMLDTDElement = __nccwpck_require__(2421);
|
|
|
|
XMLDTDEntity = __nccwpck_require__(53);
|
|
|
|
XMLDTDNotation = __nccwpck_require__(2837);
|
|
|
|
WriterState = __nccwpck_require__(9766);
|
|
|
|
module.exports = XMLWriterBase = (function() {
|
|
function XMLWriterBase(options) {
|
|
var key, ref, value;
|
|
options || (options = {});
|
|
this.options = options;
|
|
ref = options.writer || {};
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this["_" + key] = this[key];
|
|
this[key] = value;
|
|
}
|
|
}
|
|
|
|
XMLWriterBase.prototype.filterOptions = function(options) {
|
|
var filteredOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6;
|
|
options || (options = {});
|
|
options = assign({}, this.options, options);
|
|
filteredOptions = {
|
|
writer: this
|
|
};
|
|
filteredOptions.pretty = options.pretty || false;
|
|
filteredOptions.allowEmpty = options.allowEmpty || false;
|
|
filteredOptions.indent = (ref = options.indent) != null ? ref : ' ';
|
|
filteredOptions.newline = (ref1 = options.newline) != null ? ref1 : '\n';
|
|
filteredOptions.offset = (ref2 = options.offset) != null ? ref2 : 0;
|
|
filteredOptions.dontPrettyTextNodes = (ref3 = (ref4 = options.dontPrettyTextNodes) != null ? ref4 : options.dontprettytextnodes) != null ? ref3 : 0;
|
|
filteredOptions.spaceBeforeSlash = (ref5 = (ref6 = options.spaceBeforeSlash) != null ? ref6 : options.spacebeforeslash) != null ? ref5 : '';
|
|
if (filteredOptions.spaceBeforeSlash === true) {
|
|
filteredOptions.spaceBeforeSlash = ' ';
|
|
}
|
|
filteredOptions.suppressPrettyCount = 0;
|
|
filteredOptions.user = {};
|
|
filteredOptions.state = WriterState.None;
|
|
return filteredOptions;
|
|
};
|
|
|
|
XMLWriterBase.prototype.indent = function(node, options, level) {
|
|
var indentLevel;
|
|
if (!options.pretty || options.suppressPrettyCount) {
|
|
return '';
|
|
} else if (options.pretty) {
|
|
indentLevel = (level || 0) + options.offset + 1;
|
|
if (indentLevel > 0) {
|
|
return new Array(indentLevel).join(options.indent);
|
|
}
|
|
}
|
|
return '';
|
|
};
|
|
|
|
XMLWriterBase.prototype.endline = function(node, options, level) {
|
|
if (!options.pretty || options.suppressPrettyCount) {
|
|
return '';
|
|
} else {
|
|
return options.newline;
|
|
}
|
|
};
|
|
|
|
XMLWriterBase.prototype.attribute = function(att, options, level) {
|
|
var r;
|
|
this.openAttribute(att, options, level);
|
|
r = ' ' + att.name + '="' + att.value + '"';
|
|
this.closeAttribute(att, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.cdata = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<![CDATA[';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += ']]>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.comment = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!-- ';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += ' -->' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.declaration = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<?xml';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' version="' + node.version + '"';
|
|
if (node.encoding != null) {
|
|
r += ' encoding="' + node.encoding + '"';
|
|
}
|
|
if (node.standalone != null) {
|
|
r += ' standalone="' + node.standalone + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '?>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.docType = function(node, options, level) {
|
|
var child, i, len, r, ref;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
r += '<!DOCTYPE ' + node.root().name;
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.children.length > 0) {
|
|
r += ' [';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
ref = node.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
r += this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += ']';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.element = function(node, options, level) {
|
|
var att, child, childNodeCount, firstChildNode, i, j, len, len1, name, prettySuppressed, r, ref, ref1, ref2;
|
|
level || (level = 0);
|
|
prettySuppressed = false;
|
|
r = '';
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r += this.indent(node, options, level) + '<' + node.name;
|
|
ref = node.attribs;
|
|
for (name in ref) {
|
|
if (!hasProp.call(ref, name)) continue;
|
|
att = ref[name];
|
|
r += this.attribute(att, options, level);
|
|
}
|
|
childNodeCount = node.children.length;
|
|
firstChildNode = childNodeCount === 0 ? null : node.children[0];
|
|
if (childNodeCount === 0 || node.children.every(function(e) {
|
|
return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';
|
|
})) {
|
|
if (options.allowEmpty) {
|
|
r += '>';
|
|
options.state = WriterState.CloseTag;
|
|
r += '</' + node.name + '>' + this.endline(node, options, level);
|
|
} else {
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '/>' + this.endline(node, options, level);
|
|
}
|
|
} else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {
|
|
r += '>';
|
|
options.state = WriterState.InsideTag;
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
r += this.writeChildNode(firstChildNode, options, level + 1);
|
|
options.suppressPrettyCount--;
|
|
prettySuppressed = false;
|
|
options.state = WriterState.CloseTag;
|
|
r += '</' + node.name + '>' + this.endline(node, options, level);
|
|
} else {
|
|
if (options.dontPrettyTextNodes) {
|
|
ref1 = node.children;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
child = ref1[i];
|
|
if ((child.type === NodeType.Text || child.type === NodeType.Raw) && (child.value != null)) {
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
r += '>' + this.endline(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
ref2 = node.children;
|
|
for (j = 0, len1 = ref2.length; j < len1; j++) {
|
|
child = ref2[j];
|
|
r += this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += this.indent(node, options, level) + '</' + node.name + '>';
|
|
if (prettySuppressed) {
|
|
options.suppressPrettyCount--;
|
|
}
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
}
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.writeChildNode = function(node, options, level) {
|
|
switch (node.type) {
|
|
case NodeType.CData:
|
|
return this.cdata(node, options, level);
|
|
case NodeType.Comment:
|
|
return this.comment(node, options, level);
|
|
case NodeType.Element:
|
|
return this.element(node, options, level);
|
|
case NodeType.Raw:
|
|
return this.raw(node, options, level);
|
|
case NodeType.Text:
|
|
return this.text(node, options, level);
|
|
case NodeType.ProcessingInstruction:
|
|
return this.processingInstruction(node, options, level);
|
|
case NodeType.Dummy:
|
|
return '';
|
|
case NodeType.Declaration:
|
|
return this.declaration(node, options, level);
|
|
case NodeType.DocType:
|
|
return this.docType(node, options, level);
|
|
case NodeType.AttributeDeclaration:
|
|
return this.dtdAttList(node, options, level);
|
|
case NodeType.ElementDeclaration:
|
|
return this.dtdElement(node, options, level);
|
|
case NodeType.EntityDeclaration:
|
|
return this.dtdEntity(node, options, level);
|
|
case NodeType.NotationDeclaration:
|
|
return this.dtdNotation(node, options, level);
|
|
default:
|
|
throw new Error("Unknown XML node type: " + node.constructor.name);
|
|
}
|
|
};
|
|
|
|
XMLWriterBase.prototype.processingInstruction = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<?';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.target;
|
|
if (node.value) {
|
|
r += ' ' + node.value;
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '?>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.raw = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.text = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdAttList = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ATTLIST';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType;
|
|
if (node.defaultValueType !== '#DEFAULT') {
|
|
r += ' ' + node.defaultValueType;
|
|
}
|
|
if (node.defaultValue) {
|
|
r += ' "' + node.defaultValue + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdElement = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ELEMENT';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.name + ' ' + node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdEntity = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ENTITY';
|
|
options.state = WriterState.InsideTag;
|
|
if (node.pe) {
|
|
r += ' %';
|
|
}
|
|
r += ' ' + node.name;
|
|
if (node.value) {
|
|
r += ' "' + node.value + '"';
|
|
} else {
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.nData) {
|
|
r += ' NDATA ' + node.nData;
|
|
}
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdNotation = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!NOTATION';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.name;
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.pubID) {
|
|
r += ' PUBLIC "' + node.pubID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.openNode = function(node, options, level) {};
|
|
|
|
XMLWriterBase.prototype.closeNode = function(node, options, level) {};
|
|
|
|
XMLWriterBase.prototype.openAttribute = function(att, options, level) {};
|
|
|
|
XMLWriterBase.prototype.closeAttribute = function(att, options, level) {};
|
|
|
|
return XMLWriterBase;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2958:
|
|
/***/ (function(module, __unused_webpack_exports, __nccwpck_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;
|
|
|
|
ref = __nccwpck_require__(8229), assign = ref.assign, isFunction = ref.isFunction;
|
|
|
|
XMLDOMImplementation = __nccwpck_require__(8310);
|
|
|
|
XMLDocument = __nccwpck_require__(3730);
|
|
|
|
XMLDocumentCB = __nccwpck_require__(7356);
|
|
|
|
XMLStringWriter = __nccwpck_require__(5913);
|
|
|
|
XMLStreamWriter = __nccwpck_require__(8601);
|
|
|
|
NodeType = __nccwpck_require__(9267);
|
|
|
|
WriterState = __nccwpck_require__(9766);
|
|
|
|
module.exports.create = function(name, xmldec, doctype, options) {
|
|
var doc, root;
|
|
if (name == null) {
|
|
throw new Error("Root element needs a name.");
|
|
}
|
|
options = assign({}, xmldec, doctype, options);
|
|
doc = new XMLDocument(options);
|
|
root = doc.element(name);
|
|
if (!options.headless) {
|
|
doc.declaration(options);
|
|
if ((options.pubID != null) || (options.sysID != null)) {
|
|
doc.dtd(options);
|
|
}
|
|
}
|
|
return root;
|
|
};
|
|
|
|
module.exports.begin = function(options, onData, onEnd) {
|
|
var ref1;
|
|
if (isFunction(options)) {
|
|
ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];
|
|
options = {};
|
|
}
|
|
if (onData) {
|
|
return new XMLDocumentCB(options, onData, onEnd);
|
|
} else {
|
|
return new XMLDocument(options);
|
|
}
|
|
};
|
|
|
|
module.exports.stringWriter = function(options) {
|
|
return new XMLStringWriter(options);
|
|
};
|
|
|
|
module.exports.streamWriter = function(stream, options) {
|
|
return new XMLStreamWriter(stream, options);
|
|
};
|
|
|
|
module.exports.implementation = new XMLDOMImplementation();
|
|
|
|
module.exports.nodeType = NodeType;
|
|
|
|
module.exports.writerState = WriterState;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2877:
|
|
/***/ ((module) => {
|
|
|
|
module.exports = eval("require")("encoding");
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2941:
|
|
/***/ ((module) => {
|
|
|
|
module.exports = eval("require")("original-fs");
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9491:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("assert");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4300:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("buffer");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2081:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("child_process");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 6113:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("crypto");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9523:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("dns");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2361:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("events");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7147:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("fs");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3685:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("http");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5158:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("http2");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5687:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("https");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1808:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("net");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2037:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("os");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1017:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("path");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 5477:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("punycode");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2781:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("stream");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 1576:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("string_decoder");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9512:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("timers");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 4404:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("tls");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 7310:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("url");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 3837:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("util");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9796:
|
|
/***/ ((module) => {
|
|
|
|
"use strict";
|
|
module.exports = require("zlib");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9859:
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => {
|
|
|
|
"use strict";
|
|
// ESM COMPAT FLAG
|
|
__nccwpck_require__.r(__webpack_exports__);
|
|
|
|
// EXPORTS
|
|
__nccwpck_require__.d(__webpack_exports__, {
|
|
"AbortError": () => (/* reexport */ AbortError),
|
|
"CacheError": () => (/* reexport */ CacheError),
|
|
"CancelError": () => (/* reexport */ types_CancelError),
|
|
"HTTPError": () => (/* reexport */ HTTPError),
|
|
"MaxRedirectsError": () => (/* reexport */ MaxRedirectsError),
|
|
"Options": () => (/* reexport */ Options),
|
|
"ParseError": () => (/* reexport */ ParseError),
|
|
"ReadError": () => (/* reexport */ ReadError),
|
|
"RequestError": () => (/* reexport */ RequestError),
|
|
"RetryError": () => (/* reexport */ RetryError),
|
|
"TimeoutError": () => (/* reexport */ TimeoutError),
|
|
"UploadError": () => (/* reexport */ UploadError),
|
|
"calculateRetryDelay": () => (/* reexport */ calculate_retry_delay),
|
|
"create": () => (/* reexport */ source_create),
|
|
"default": () => (/* binding */ got_dist_source),
|
|
"got": () => (/* binding */ got),
|
|
"isResponseOk": () => (/* reexport */ isResponseOk),
|
|
"parseBody": () => (/* reexport */ parseBody),
|
|
"parseLinkHeader": () => (/* reexport */ parseLinkHeader)
|
|
});
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/@sindresorhus/is/dist/index.js
|
|
const typedArrayTypeNames = [
|
|
'Int8Array',
|
|
'Uint8Array',
|
|
'Uint8ClampedArray',
|
|
'Int16Array',
|
|
'Uint16Array',
|
|
'Int32Array',
|
|
'Uint32Array',
|
|
'Float32Array',
|
|
'Float64Array',
|
|
'BigInt64Array',
|
|
'BigUint64Array',
|
|
];
|
|
function isTypedArrayName(name) {
|
|
return typedArrayTypeNames.includes(name);
|
|
}
|
|
const objectTypeNames = [
|
|
'Function',
|
|
'Generator',
|
|
'AsyncGenerator',
|
|
'GeneratorFunction',
|
|
'AsyncGeneratorFunction',
|
|
'AsyncFunction',
|
|
'Observable',
|
|
'Array',
|
|
'Buffer',
|
|
'Blob',
|
|
'Object',
|
|
'RegExp',
|
|
'Date',
|
|
'Error',
|
|
'Map',
|
|
'Set',
|
|
'WeakMap',
|
|
'WeakSet',
|
|
'WeakRef',
|
|
'ArrayBuffer',
|
|
'SharedArrayBuffer',
|
|
'DataView',
|
|
'Promise',
|
|
'URL',
|
|
'FormData',
|
|
'URLSearchParams',
|
|
'HTMLElement',
|
|
'NaN',
|
|
...typedArrayTypeNames,
|
|
];
|
|
function isObjectTypeName(name) {
|
|
return objectTypeNames.includes(name);
|
|
}
|
|
const primitiveTypeNames = [
|
|
'null',
|
|
'undefined',
|
|
'string',
|
|
'number',
|
|
'bigint',
|
|
'boolean',
|
|
'symbol',
|
|
];
|
|
function isPrimitiveTypeName(name) {
|
|
return primitiveTypeNames.includes(name);
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
function isOfType(type) {
|
|
return (value) => typeof value === type;
|
|
}
|
|
const { toString: dist_toString } = Object.prototype;
|
|
const getObjectType = (value) => {
|
|
const objectTypeName = dist_toString.call(value).slice(8, -1);
|
|
if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) {
|
|
return 'HTMLElement';
|
|
}
|
|
if (isObjectTypeName(objectTypeName)) {
|
|
return objectTypeName;
|
|
}
|
|
return undefined;
|
|
};
|
|
const isObjectOfType = (type) => (value) => getObjectType(value) === type;
|
|
function is(value) {
|
|
if (value === null) {
|
|
return 'null';
|
|
}
|
|
switch (typeof value) {
|
|
case 'undefined':
|
|
return 'undefined';
|
|
case 'string':
|
|
return 'string';
|
|
case 'number':
|
|
return Number.isNaN(value) ? 'NaN' : 'number';
|
|
case 'boolean':
|
|
return 'boolean';
|
|
case 'function':
|
|
return 'Function';
|
|
case 'bigint':
|
|
return 'bigint';
|
|
case 'symbol':
|
|
return 'symbol';
|
|
default:
|
|
}
|
|
if (is.observable(value)) {
|
|
return 'Observable';
|
|
}
|
|
if (is.array(value)) {
|
|
return 'Array';
|
|
}
|
|
if (is.buffer(value)) {
|
|
return 'Buffer';
|
|
}
|
|
const tagType = getObjectType(value);
|
|
if (tagType) {
|
|
return tagType;
|
|
}
|
|
if (value instanceof String || value instanceof Boolean || value instanceof Number) {
|
|
throw new TypeError('Please don\'t use object wrappers for primitive types');
|
|
}
|
|
return 'Object';
|
|
}
|
|
is.undefined = isOfType('undefined');
|
|
is.string = isOfType('string');
|
|
const isNumberType = isOfType('number');
|
|
is.number = (value) => isNumberType(value) && !is.nan(value);
|
|
is.bigint = isOfType('bigint');
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
is.function_ = isOfType('function');
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
is.null_ = (value) => value === null;
|
|
is.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');
|
|
is.boolean = (value) => value === true || value === false;
|
|
is.symbol = isOfType('symbol');
|
|
is.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
|
|
is.array = (value, assertion) => {
|
|
if (!Array.isArray(value)) {
|
|
return false;
|
|
}
|
|
if (!is.function_(assertion)) {
|
|
return true;
|
|
}
|
|
return value.every(element => assertion(element));
|
|
};
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
|
|
is.buffer = (value) => value?.constructor?.isBuffer?.(value) ?? false;
|
|
is.blob = (value) => isObjectOfType('Blob')(value);
|
|
is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); // eslint-disable-line @typescript-eslint/ban-types
|
|
is.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value)); // eslint-disable-line @typescript-eslint/ban-types
|
|
is.iterable = (value) => is.function_(value?.[Symbol.iterator]);
|
|
is.asyncIterable = (value) => is.function_(value?.[Symbol.asyncIterator]);
|
|
is.generator = (value) => is.iterable(value) && is.function_(value?.next) && is.function_(value?.throw);
|
|
is.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);
|
|
is.nativePromise = (value) => isObjectOfType('Promise')(value);
|
|
const hasPromiseApi = (value) => is.function_(value?.then)
|
|
&& is.function_(value?.catch);
|
|
is.promise = (value) => is.nativePromise(value) || hasPromiseApi(value);
|
|
is.generatorFunction = isObjectOfType('GeneratorFunction');
|
|
is.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction';
|
|
is.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction';
|
|
// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types
|
|
is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');
|
|
is.regExp = isObjectOfType('RegExp');
|
|
is.date = isObjectOfType('Date');
|
|
is.error = isObjectOfType('Error');
|
|
is.map = (value) => isObjectOfType('Map')(value);
|
|
is.set = (value) => isObjectOfType('Set')(value);
|
|
is.weakMap = (value) => isObjectOfType('WeakMap')(value); // eslint-disable-line @typescript-eslint/ban-types
|
|
is.weakSet = (value) => isObjectOfType('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types
|
|
is.weakRef = (value) => isObjectOfType('WeakRef')(value); // eslint-disable-line @typescript-eslint/ban-types
|
|
is.int8Array = isObjectOfType('Int8Array');
|
|
is.uint8Array = isObjectOfType('Uint8Array');
|
|
is.uint8ClampedArray = isObjectOfType('Uint8ClampedArray');
|
|
is.int16Array = isObjectOfType('Int16Array');
|
|
is.uint16Array = isObjectOfType('Uint16Array');
|
|
is.int32Array = isObjectOfType('Int32Array');
|
|
is.uint32Array = isObjectOfType('Uint32Array');
|
|
is.float32Array = isObjectOfType('Float32Array');
|
|
is.float64Array = isObjectOfType('Float64Array');
|
|
is.bigInt64Array = isObjectOfType('BigInt64Array');
|
|
is.bigUint64Array = isObjectOfType('BigUint64Array');
|
|
is.arrayBuffer = isObjectOfType('ArrayBuffer');
|
|
is.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer');
|
|
is.dataView = isObjectOfType('DataView');
|
|
is.enumCase = (value, targetEnum) => Object.values(targetEnum).includes(value);
|
|
is.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;
|
|
is.urlInstance = (value) => isObjectOfType('URL')(value);
|
|
is.urlString = (value) => {
|
|
if (!is.string(value)) {
|
|
return false;
|
|
}
|
|
try {
|
|
new URL(value); // eslint-disable-line no-new
|
|
return true;
|
|
}
|
|
catch {
|
|
return false;
|
|
}
|
|
};
|
|
// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
|
|
is.truthy = (value) => Boolean(value); // eslint-disable-line unicorn/prefer-native-coercion-functions
|
|
// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
|
|
is.falsy = (value) => !value;
|
|
is.nan = (value) => Number.isNaN(value);
|
|
is.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value);
|
|
is.integer = (value) => Number.isInteger(value);
|
|
is.safeInteger = (value) => Number.isSafeInteger(value);
|
|
is.plainObject = (value) => {
|
|
// From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js
|
|
if (typeof value !== 'object' || value === null) {
|
|
return false;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
const prototype = Object.getPrototypeOf(value);
|
|
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
|
|
};
|
|
is.typedArray = (value) => isTypedArrayName(getObjectType(value));
|
|
const isValidLength = (value) => is.safeInteger(value) && value >= 0;
|
|
is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);
|
|
is.inRange = (value, range) => {
|
|
if (is.number(range)) {
|
|
return value >= Math.min(0, range) && value <= Math.max(range, 0);
|
|
}
|
|
if (is.array(range) && range.length === 2) {
|
|
return value >= Math.min(...range) && value <= Math.max(...range);
|
|
}
|
|
throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
|
|
};
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
const NODE_TYPE_ELEMENT = 1;
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
const DOM_PROPERTIES_TO_CHECK = [
|
|
'innerHTML',
|
|
'ownerDocument',
|
|
'style',
|
|
'attributes',
|
|
'nodeValue',
|
|
];
|
|
is.domElement = (value) => is.object(value)
|
|
&& value.nodeType === NODE_TYPE_ELEMENT
|
|
&& is.string(value.nodeName)
|
|
&& !is.plainObject(value)
|
|
&& DOM_PROPERTIES_TO_CHECK.every(property => property in value);
|
|
is.observable = (value) => {
|
|
if (!value) {
|
|
return false;
|
|
}
|
|
// eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call
|
|
if (value === value[Symbol.observable]?.()) {
|
|
return true;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
if (value === value['@@observable']?.()) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
is.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);
|
|
is.infinite = (value) => value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;
|
|
const isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;
|
|
is.evenInteger = isAbsoluteMod2(0);
|
|
is.oddInteger = isAbsoluteMod2(1);
|
|
is.emptyArray = (value) => is.array(value) && value.length === 0;
|
|
is.nonEmptyArray = (value) => is.array(value) && value.length > 0;
|
|
is.emptyString = (value) => is.string(value) && value.length === 0;
|
|
const isWhiteSpaceString = (value) => is.string(value) && !/\S/.test(value);
|
|
is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);
|
|
// TODO: Use `not ''` when the `not` operator is available.
|
|
is.nonEmptyString = (value) => is.string(value) && value.length > 0;
|
|
// TODO: Use `not ''` when the `not` operator is available.
|
|
is.nonEmptyStringAndNotWhitespace = (value) => is.string(value) && !is.emptyStringOrWhitespace(value);
|
|
// eslint-disable-next-line unicorn/no-array-callback-reference
|
|
is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;
|
|
// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
|
|
// - https://github.com/Microsoft/TypeScript/pull/29317
|
|
// eslint-disable-next-line unicorn/no-array-callback-reference
|
|
is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;
|
|
is.emptySet = (value) => is.set(value) && value.size === 0;
|
|
is.nonEmptySet = (value) => is.set(value) && value.size > 0;
|
|
// eslint-disable-next-line unicorn/no-array-callback-reference
|
|
is.emptyMap = (value) => is.map(value) && value.size === 0;
|
|
// eslint-disable-next-line unicorn/no-array-callback-reference
|
|
is.nonEmptyMap = (value) => is.map(value) && value.size > 0;
|
|
// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)
|
|
is.propertyKey = (value) => is.any([is.string, is.number, is.symbol], value);
|
|
is.formData = (value) => isObjectOfType('FormData')(value);
|
|
is.urlSearchParams = (value) => isObjectOfType('URLSearchParams')(value);
|
|
const predicateOnArray = (method, predicate, values) => {
|
|
if (!is.function_(predicate)) {
|
|
throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
|
|
}
|
|
if (values.length === 0) {
|
|
throw new TypeError('Invalid number of values');
|
|
}
|
|
return method.call(values, predicate);
|
|
};
|
|
is.any = (predicate, ...values) => {
|
|
const predicates = is.array(predicate) ? predicate : [predicate];
|
|
return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));
|
|
};
|
|
is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);
|
|
const assertType = (condition, description, value, options = {}) => {
|
|
if (!condition) {
|
|
const { multipleValues } = options;
|
|
const valuesMessage = multipleValues
|
|
? `received values of types ${[
|
|
...new Set(value.map(singleValue => `\`${is(singleValue)}\``)),
|
|
].join(', ')}`
|
|
: `received value of type \`${is(value)}\``;
|
|
throw new TypeError(`Expected value which is \`${description}\`, ${valuesMessage}.`);
|
|
}
|
|
};
|
|
/* eslint-disable @typescript-eslint/no-confusing-void-expression */
|
|
const assert = {
|
|
// Unknowns.
|
|
undefined: (value) => assertType(is.undefined(value), 'undefined', value),
|
|
string: (value) => assertType(is.string(value), 'string', value),
|
|
number: (value) => assertType(is.number(value), 'number', value),
|
|
bigint: (value) => assertType(is.bigint(value), 'bigint', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
function_: (value) => assertType(is.function_(value), 'Function', value),
|
|
null_: (value) => assertType(is.null_(value), 'null', value),
|
|
class_: (value) => assertType(is.class_(value), "Class" /* AssertionTypeDescription.class_ */, value),
|
|
boolean: (value) => assertType(is.boolean(value), 'boolean', value),
|
|
symbol: (value) => assertType(is.symbol(value), 'symbol', value),
|
|
numericString: (value) => assertType(is.numericString(value), "string with a number" /* AssertionTypeDescription.numericString */, value),
|
|
array: (value, assertion) => {
|
|
const assert = assertType;
|
|
assert(is.array(value), 'Array', value);
|
|
if (assertion) {
|
|
// eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference
|
|
value.forEach(assertion);
|
|
}
|
|
},
|
|
buffer: (value) => assertType(is.buffer(value), 'Buffer', value),
|
|
blob: (value) => assertType(is.blob(value), 'Blob', value),
|
|
nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), "null or undefined" /* AssertionTypeDescription.nullOrUndefined */, value),
|
|
object: (value) => assertType(is.object(value), 'Object', value),
|
|
iterable: (value) => assertType(is.iterable(value), "Iterable" /* AssertionTypeDescription.iterable */, value),
|
|
asyncIterable: (value) => assertType(is.asyncIterable(value), "AsyncIterable" /* AssertionTypeDescription.asyncIterable */, value),
|
|
generator: (value) => assertType(is.generator(value), 'Generator', value),
|
|
asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value),
|
|
nativePromise: (value) => assertType(is.nativePromise(value), "native Promise" /* AssertionTypeDescription.nativePromise */, value),
|
|
promise: (value) => assertType(is.promise(value), 'Promise', value),
|
|
generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value),
|
|
asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value),
|
|
regExp: (value) => assertType(is.regExp(value), 'RegExp', value),
|
|
date: (value) => assertType(is.date(value), 'Date', value),
|
|
error: (value) => assertType(is.error(value), 'Error', value),
|
|
map: (value) => assertType(is.map(value), 'Map', value),
|
|
set: (value) => assertType(is.set(value), 'Set', value),
|
|
weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value),
|
|
weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value),
|
|
weakRef: (value) => assertType(is.weakRef(value), 'WeakRef', value),
|
|
int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value),
|
|
uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value),
|
|
uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),
|
|
int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value),
|
|
uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value),
|
|
int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value),
|
|
uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value),
|
|
float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value),
|
|
float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value),
|
|
bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value),
|
|
bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value),
|
|
arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value),
|
|
sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),
|
|
dataView: (value) => assertType(is.dataView(value), 'DataView', value),
|
|
enumCase: (value, targetEnum) => assertType(is.enumCase(value, targetEnum), 'EnumCase', value),
|
|
urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value),
|
|
urlString: (value) => assertType(is.urlString(value), "string with a URL" /* AssertionTypeDescription.urlString */, value),
|
|
truthy: (value) => assertType(is.truthy(value), "truthy" /* AssertionTypeDescription.truthy */, value),
|
|
falsy: (value) => assertType(is.falsy(value), "falsy" /* AssertionTypeDescription.falsy */, value),
|
|
nan: (value) => assertType(is.nan(value), "NaN" /* AssertionTypeDescription.nan */, value),
|
|
primitive: (value) => assertType(is.primitive(value), "primitive" /* AssertionTypeDescription.primitive */, value),
|
|
integer: (value) => assertType(is.integer(value), "integer" /* AssertionTypeDescription.integer */, value),
|
|
safeInteger: (value) => assertType(is.safeInteger(value), "integer" /* AssertionTypeDescription.safeInteger */, value),
|
|
plainObject: (value) => assertType(is.plainObject(value), "plain object" /* AssertionTypeDescription.plainObject */, value),
|
|
typedArray: (value) => assertType(is.typedArray(value), "TypedArray" /* AssertionTypeDescription.typedArray */, value),
|
|
arrayLike: (value) => assertType(is.arrayLike(value), "array-like" /* AssertionTypeDescription.arrayLike */, value),
|
|
domElement: (value) => assertType(is.domElement(value), "HTMLElement" /* AssertionTypeDescription.domElement */, value),
|
|
observable: (value) => assertType(is.observable(value), 'Observable', value),
|
|
nodeStream: (value) => assertType(is.nodeStream(value), "Node.js Stream" /* AssertionTypeDescription.nodeStream */, value),
|
|
infinite: (value) => assertType(is.infinite(value), "infinite number" /* AssertionTypeDescription.infinite */, value),
|
|
emptyArray: (value) => assertType(is.emptyArray(value), "empty array" /* AssertionTypeDescription.emptyArray */, value),
|
|
nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), "non-empty array" /* AssertionTypeDescription.nonEmptyArray */, value),
|
|
emptyString: (value) => assertType(is.emptyString(value), "empty string" /* AssertionTypeDescription.emptyString */, value),
|
|
emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), "empty string or whitespace" /* AssertionTypeDescription.emptyStringOrWhitespace */, value),
|
|
nonEmptyString: (value) => assertType(is.nonEmptyString(value), "non-empty string" /* AssertionTypeDescription.nonEmptyString */, value),
|
|
nonEmptyStringAndNotWhitespace: (value) => assertType(is.nonEmptyStringAndNotWhitespace(value), "non-empty string and not whitespace" /* AssertionTypeDescription.nonEmptyStringAndNotWhitespace */, value),
|
|
emptyObject: (value) => assertType(is.emptyObject(value), "empty object" /* AssertionTypeDescription.emptyObject */, value),
|
|
nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), "non-empty object" /* AssertionTypeDescription.nonEmptyObject */, value),
|
|
emptySet: (value) => assertType(is.emptySet(value), "empty set" /* AssertionTypeDescription.emptySet */, value),
|
|
nonEmptySet: (value) => assertType(is.nonEmptySet(value), "non-empty set" /* AssertionTypeDescription.nonEmptySet */, value),
|
|
emptyMap: (value) => assertType(is.emptyMap(value), "empty map" /* AssertionTypeDescription.emptyMap */, value),
|
|
nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), "non-empty map" /* AssertionTypeDescription.nonEmptyMap */, value),
|
|
propertyKey: (value) => assertType(is.propertyKey(value), 'PropertyKey', value),
|
|
formData: (value) => assertType(is.formData(value), 'FormData', value),
|
|
urlSearchParams: (value) => assertType(is.urlSearchParams(value), 'URLSearchParams', value),
|
|
// Numbers.
|
|
evenInteger: (value) => assertType(is.evenInteger(value), "even integer" /* AssertionTypeDescription.evenInteger */, value),
|
|
oddInteger: (value) => assertType(is.oddInteger(value), "odd integer" /* AssertionTypeDescription.oddInteger */, value),
|
|
// Two arguments.
|
|
directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), "T" /* AssertionTypeDescription.directInstanceOf */, instance),
|
|
inRange: (value, range) => assertType(is.inRange(value, range), "in range" /* AssertionTypeDescription.inRange */, value),
|
|
// Variadic functions.
|
|
any: (predicate, ...values) => assertType(is.any(predicate, ...values), "predicate returns truthy for any value" /* AssertionTypeDescription.any */, values, { multipleValues: true }),
|
|
all: (predicate, ...values) => assertType(is.all(predicate, ...values), "predicate returns truthy for all values" /* AssertionTypeDescription.all */, values, { multipleValues: true }),
|
|
};
|
|
/* eslint-enable @typescript-eslint/no-confusing-void-expression */
|
|
// Some few keywords are reserved, but we'll populate them for Node.js users
|
|
// See https://github.com/Microsoft/TypeScript/issues/2536
|
|
Object.defineProperties(is, {
|
|
class: {
|
|
value: is.class_,
|
|
},
|
|
function: {
|
|
value: is.function_,
|
|
},
|
|
null: {
|
|
value: is.null_,
|
|
},
|
|
});
|
|
Object.defineProperties(assert, {
|
|
class: {
|
|
value: assert.class_,
|
|
},
|
|
function: {
|
|
value: assert.function_,
|
|
},
|
|
null: {
|
|
value: assert.null_,
|
|
},
|
|
});
|
|
/* harmony default export */ const dist = (is);
|
|
|
|
;// CONCATENATED MODULE: external "node:events"
|
|
const external_node_events_namespaceObject = require("node:events");
|
|
;// CONCATENATED MODULE: ./node_modules/p-cancelable/index.js
|
|
class CancelError extends Error {
|
|
constructor(reason) {
|
|
super(reason || 'Promise was canceled');
|
|
this.name = 'CancelError';
|
|
}
|
|
|
|
get isCanceled() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// TODO: Use private class fields when ESLint 8 is out.
|
|
|
|
class PCancelable {
|
|
static fn(userFunction) {
|
|
return (...arguments_) => {
|
|
return new PCancelable((resolve, reject, onCancel) => {
|
|
arguments_.push(onCancel);
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
userFunction(...arguments_).then(resolve, reject);
|
|
});
|
|
};
|
|
}
|
|
|
|
constructor(executor) {
|
|
this._cancelHandlers = [];
|
|
this._isPending = true;
|
|
this._isCanceled = false;
|
|
this._rejectOnCancel = true;
|
|
|
|
this._promise = new Promise((resolve, reject) => {
|
|
this._reject = reject;
|
|
|
|
const onResolve = value => {
|
|
if (!this._isCanceled || !onCancel.shouldReject) {
|
|
this._isPending = false;
|
|
resolve(value);
|
|
}
|
|
};
|
|
|
|
const onReject = error => {
|
|
this._isPending = false;
|
|
reject(error);
|
|
};
|
|
|
|
const onCancel = handler => {
|
|
if (!this._isPending) {
|
|
throw new Error('The `onCancel` handler was attached after the promise settled.');
|
|
}
|
|
|
|
this._cancelHandlers.push(handler);
|
|
};
|
|
|
|
Object.defineProperties(onCancel, {
|
|
shouldReject: {
|
|
get: () => this._rejectOnCancel,
|
|
set: boolean => {
|
|
this._rejectOnCancel = boolean;
|
|
}
|
|
}
|
|
});
|
|
|
|
executor(onResolve, onReject, onCancel);
|
|
});
|
|
}
|
|
|
|
then(onFulfilled, onRejected) {
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
return this._promise.then(onFulfilled, onRejected);
|
|
}
|
|
|
|
catch(onRejected) {
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
return this._promise.catch(onRejected);
|
|
}
|
|
|
|
finally(onFinally) {
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
return this._promise.finally(onFinally);
|
|
}
|
|
|
|
cancel(reason) {
|
|
if (!this._isPending || this._isCanceled) {
|
|
return;
|
|
}
|
|
|
|
this._isCanceled = true;
|
|
|
|
if (this._cancelHandlers.length > 0) {
|
|
try {
|
|
for (const handler of this._cancelHandlers) {
|
|
handler();
|
|
}
|
|
} catch (error) {
|
|
this._reject(error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (this._rejectOnCancel) {
|
|
this._reject(new CancelError(reason));
|
|
}
|
|
}
|
|
|
|
get isCanceled() {
|
|
return this._isCanceled;
|
|
}
|
|
}
|
|
|
|
Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/errors.js
|
|
|
|
// A hacky check to prevent circular references.
|
|
function isRequest(x) {
|
|
return dist.object(x) && '_onResponse' in x;
|
|
}
|
|
/**
|
|
An error to be thrown when a request fails.
|
|
Contains a `code` property with error class code, like `ECONNREFUSED`.
|
|
*/
|
|
class RequestError extends Error {
|
|
constructor(message, error, self) {
|
|
super(message);
|
|
Object.defineProperty(this, "input", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "code", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "stack", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "response", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "request", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "timings", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Error.captureStackTrace(this, this.constructor);
|
|
this.name = 'RequestError';
|
|
this.code = error.code ?? 'ERR_GOT_REQUEST_ERROR';
|
|
this.input = error.input;
|
|
if (isRequest(self)) {
|
|
Object.defineProperty(this, 'request', {
|
|
enumerable: false,
|
|
value: self,
|
|
});
|
|
Object.defineProperty(this, 'response', {
|
|
enumerable: false,
|
|
value: self.response,
|
|
});
|
|
this.options = self.options;
|
|
}
|
|
else {
|
|
this.options = self;
|
|
}
|
|
this.timings = this.request?.timings;
|
|
// Recover the original stacktrace
|
|
if (dist.string(error.stack) && dist.string(this.stack)) {
|
|
const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;
|
|
const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse();
|
|
const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse();
|
|
// Remove duplicated traces
|
|
while (errorStackTrace.length > 0 && errorStackTrace[0] === thisStackTrace[0]) {
|
|
thisStackTrace.shift();
|
|
}
|
|
this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`;
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when the server redirects you more than ten times.
|
|
Includes a `response` property.
|
|
*/
|
|
class MaxRedirectsError extends RequestError {
|
|
constructor(request) {
|
|
super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);
|
|
this.name = 'MaxRedirectsError';
|
|
this.code = 'ERR_TOO_MANY_REDIRECTS';
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.
|
|
Includes a `response` property.
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
class HTTPError extends RequestError {
|
|
constructor(response) {
|
|
super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);
|
|
this.name = 'HTTPError';
|
|
this.code = 'ERR_NON_2XX_3XX_RESPONSE';
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when a cache method fails.
|
|
For example, if the database goes down or there's a filesystem error.
|
|
*/
|
|
class CacheError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'CacheError';
|
|
this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code;
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when the request body is a stream and an error occurs while reading from that stream.
|
|
*/
|
|
class UploadError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'UploadError';
|
|
this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code;
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when the request is aborted due to a timeout.
|
|
Includes an `event` and `timings` property.
|
|
*/
|
|
class TimeoutError extends RequestError {
|
|
constructor(error, timings, request) {
|
|
super(error.message, error, request);
|
|
Object.defineProperty(this, "timings", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "event", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
this.name = 'TimeoutError';
|
|
this.event = error.event;
|
|
this.timings = timings;
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when reading from response stream fails.
|
|
*/
|
|
class ReadError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'ReadError';
|
|
this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code;
|
|
}
|
|
}
|
|
/**
|
|
An error which always triggers a new retry when thrown.
|
|
*/
|
|
class RetryError extends RequestError {
|
|
constructor(request) {
|
|
super('Retrying', {}, request);
|
|
this.name = 'RetryError';
|
|
this.code = 'ERR_RETRYING';
|
|
}
|
|
}
|
|
/**
|
|
An error to be thrown when the request is aborted by AbortController.
|
|
*/
|
|
class AbortError extends RequestError {
|
|
constructor(request) {
|
|
super('This operation was aborted.', {}, request);
|
|
this.code = 'ERR_ABORTED';
|
|
this.name = 'AbortError';
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: external "node:process"
|
|
const external_node_process_namespaceObject = require("node:process");
|
|
;// CONCATENATED MODULE: external "node:buffer"
|
|
const external_node_buffer_namespaceObject = require("node:buffer");
|
|
;// CONCATENATED MODULE: external "node:stream"
|
|
const external_node_stream_namespaceObject = require("node:stream");
|
|
;// CONCATENATED MODULE: external "node:url"
|
|
const external_node_url_namespaceObject = require("node:url");
|
|
;// CONCATENATED MODULE: external "node:http"
|
|
const external_node_http_namespaceObject = require("node:http");
|
|
// EXTERNAL MODULE: external "events"
|
|
var external_events_ = __nccwpck_require__(2361);
|
|
// EXTERNAL MODULE: external "util"
|
|
var external_util_ = __nccwpck_require__(3837);
|
|
// EXTERNAL MODULE: ./node_modules/defer-to-connect/dist/source/index.js
|
|
var source = __nccwpck_require__(6214);
|
|
;// CONCATENATED MODULE: ./node_modules/@szmarczak/http-timer/dist/source/index.js
|
|
|
|
|
|
|
|
const timer = (request) => {
|
|
if (request.timings) {
|
|
return request.timings;
|
|
}
|
|
const timings = {
|
|
start: Date.now(),
|
|
socket: undefined,
|
|
lookup: undefined,
|
|
connect: undefined,
|
|
secureConnect: undefined,
|
|
upload: undefined,
|
|
response: undefined,
|
|
end: undefined,
|
|
error: undefined,
|
|
abort: undefined,
|
|
phases: {
|
|
wait: undefined,
|
|
dns: undefined,
|
|
tcp: undefined,
|
|
tls: undefined,
|
|
request: undefined,
|
|
firstByte: undefined,
|
|
download: undefined,
|
|
total: undefined,
|
|
},
|
|
};
|
|
request.timings = timings;
|
|
const handleError = (origin) => {
|
|
origin.once(external_events_.errorMonitor, () => {
|
|
timings.error = Date.now();
|
|
timings.phases.total = timings.error - timings.start;
|
|
});
|
|
};
|
|
handleError(request);
|
|
const onAbort = () => {
|
|
timings.abort = Date.now();
|
|
timings.phases.total = timings.abort - timings.start;
|
|
};
|
|
request.prependOnceListener('abort', onAbort);
|
|
const onSocket = (socket) => {
|
|
timings.socket = Date.now();
|
|
timings.phases.wait = timings.socket - timings.start;
|
|
if (external_util_.types.isProxy(socket)) {
|
|
return;
|
|
}
|
|
const lookupListener = () => {
|
|
timings.lookup = Date.now();
|
|
timings.phases.dns = timings.lookup - timings.socket;
|
|
};
|
|
socket.prependOnceListener('lookup', lookupListener);
|
|
source(socket, {
|
|
connect: () => {
|
|
timings.connect = Date.now();
|
|
if (timings.lookup === undefined) {
|
|
socket.removeListener('lookup', lookupListener);
|
|
timings.lookup = timings.connect;
|
|
timings.phases.dns = timings.lookup - timings.socket;
|
|
}
|
|
timings.phases.tcp = timings.connect - timings.lookup;
|
|
},
|
|
secureConnect: () => {
|
|
timings.secureConnect = Date.now();
|
|
timings.phases.tls = timings.secureConnect - timings.connect;
|
|
},
|
|
});
|
|
};
|
|
if (request.socket) {
|
|
onSocket(request.socket);
|
|
}
|
|
else {
|
|
request.prependOnceListener('socket', onSocket);
|
|
}
|
|
const onUpload = () => {
|
|
timings.upload = Date.now();
|
|
timings.phases.request = timings.upload - (timings.secureConnect ?? timings.connect);
|
|
};
|
|
if (request.writableFinished) {
|
|
onUpload();
|
|
}
|
|
else {
|
|
request.prependOnceListener('finish', onUpload);
|
|
}
|
|
request.prependOnceListener('response', (response) => {
|
|
timings.response = Date.now();
|
|
timings.phases.firstByte = timings.response - timings.upload;
|
|
response.timings = timings;
|
|
handleError(response);
|
|
response.prependOnceListener('end', () => {
|
|
request.off('abort', onAbort);
|
|
response.off('aborted', onAbort);
|
|
if (timings.phases.total) {
|
|
// Aborted or errored
|
|
return;
|
|
}
|
|
timings.end = Date.now();
|
|
timings.phases.download = timings.end - timings.response;
|
|
timings.phases.total = timings.end - timings.start;
|
|
});
|
|
response.prependOnceListener('aborted', onAbort);
|
|
});
|
|
return timings;
|
|
};
|
|
/* harmony default export */ const dist_source = (timer);
|
|
|
|
// EXTERNAL MODULE: ./node_modules/cacheable-request/src/index.js
|
|
var src = __nccwpck_require__(8116);
|
|
// EXTERNAL MODULE: ./node_modules/decompress-response/index.js
|
|
var decompress_response = __nccwpck_require__(2391);
|
|
// EXTERNAL MODULE: ./node_modules/get-stream/index.js
|
|
var get_stream = __nccwpck_require__(1766);
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFunction.js
|
|
const isFunction = (value) => (typeof value === "function");
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFormData.js
|
|
|
|
const isFormData = (value) => Boolean(value
|
|
&& isFunction(value.constructor)
|
|
&& value[Symbol.toStringTag] === "FormData"
|
|
&& isFunction(value.append)
|
|
&& isFunction(value.getAll)
|
|
&& isFunction(value.entries)
|
|
&& isFunction(value[Symbol.iterator]));
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/createBoundary.js
|
|
const alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
function createBoundary() {
|
|
let size = 16;
|
|
let res = "";
|
|
while (size--) {
|
|
res += alphabet[(Math.random() * alphabet.length) << 0];
|
|
}
|
|
return res;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/normalizeValue.js
|
|
const normalizeValue = (value) => String(value)
|
|
.replace(/\r|\n/g, (match, i, str) => {
|
|
if ((match === "\r" && str[i + 1] !== "\n")
|
|
|| (match === "\n" && str[i - 1] !== "\r")) {
|
|
return "\r\n";
|
|
}
|
|
return match;
|
|
});
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isPlainObject.js
|
|
const getType = (value) => (Object.prototype.toString.call(value).slice(8, -1).toLowerCase());
|
|
function isPlainObject(value) {
|
|
if (getType(value) !== "object") {
|
|
return false;
|
|
}
|
|
const pp = Object.getPrototypeOf(value);
|
|
if (pp === null || pp === undefined) {
|
|
return true;
|
|
}
|
|
const Ctor = pp.constructor && pp.constructor.toString();
|
|
return Ctor === Object.toString();
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/proxyHeaders.js
|
|
function getProperty(target, prop) {
|
|
if (typeof prop !== "string") {
|
|
return target[prop];
|
|
}
|
|
for (const [name, value] of Object.entries(target)) {
|
|
if (prop.toLowerCase() === name.toLowerCase()) {
|
|
return value;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
const proxyHeaders = (object) => new Proxy(object, {
|
|
get: (target, prop) => getProperty(target, prop),
|
|
has: (target, prop) => getProperty(target, prop) !== undefined
|
|
});
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/escapeName.js
|
|
const escapeName = (name) => String(name)
|
|
.replace(/\r/g, "%0D")
|
|
.replace(/\n/g, "%0A")
|
|
.replace(/"/g, "%22");
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFile.js
|
|
|
|
const isFile = (value) => Boolean(value
|
|
&& typeof value === "object"
|
|
&& isFunction(value.constructor)
|
|
&& value[Symbol.toStringTag] === "File"
|
|
&& isFunction(value.stream)
|
|
&& value.name != null);
|
|
const isFileLike = (/* unused pure expression or super */ null && (isFile));
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/FormDataEncoder.js
|
|
var __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
};
|
|
var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
};
|
|
var _FormDataEncoder_instances, _FormDataEncoder_CRLF, _FormDataEncoder_CRLF_BYTES, _FormDataEncoder_CRLF_BYTES_LENGTH, _FormDataEncoder_DASHES, _FormDataEncoder_encoder, _FormDataEncoder_footer, _FormDataEncoder_form, _FormDataEncoder_options, _FormDataEncoder_getFieldHeader, _FormDataEncoder_getContentLength;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const defaultOptions = {
|
|
enableAdditionalHeaders: false
|
|
};
|
|
const readonlyProp = { writable: false, configurable: false };
|
|
class FormDataEncoder {
|
|
constructor(form, boundaryOrOptions, options) {
|
|
_FormDataEncoder_instances.add(this);
|
|
_FormDataEncoder_CRLF.set(this, "\r\n");
|
|
_FormDataEncoder_CRLF_BYTES.set(this, void 0);
|
|
_FormDataEncoder_CRLF_BYTES_LENGTH.set(this, void 0);
|
|
_FormDataEncoder_DASHES.set(this, "-".repeat(2));
|
|
_FormDataEncoder_encoder.set(this, new TextEncoder());
|
|
_FormDataEncoder_footer.set(this, void 0);
|
|
_FormDataEncoder_form.set(this, void 0);
|
|
_FormDataEncoder_options.set(this, void 0);
|
|
if (!isFormData(form)) {
|
|
throw new TypeError("Expected first argument to be a FormData instance.");
|
|
}
|
|
let boundary;
|
|
if (isPlainObject(boundaryOrOptions)) {
|
|
options = boundaryOrOptions;
|
|
}
|
|
else {
|
|
boundary = boundaryOrOptions;
|
|
}
|
|
if (!boundary) {
|
|
boundary = createBoundary();
|
|
}
|
|
if (typeof boundary !== "string") {
|
|
throw new TypeError("Expected boundary argument to be a string.");
|
|
}
|
|
if (options && !isPlainObject(options)) {
|
|
throw new TypeError("Expected options argument to be an object.");
|
|
}
|
|
__classPrivateFieldSet(this, _FormDataEncoder_form, Array.from(form.entries()), "f");
|
|
__classPrivateFieldSet(this, _FormDataEncoder_options, { ...defaultOptions, ...options }, "f");
|
|
__classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES, __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")), "f");
|
|
__classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, "f").byteLength, "f");
|
|
this.boundary = `form-data-boundary-${boundary}`;
|
|
this.contentType = `multipart/form-data; boundary=${this.boundary}`;
|
|
__classPrivateFieldSet(this, _FormDataEncoder_footer, __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(`${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f").repeat(2)}`), "f");
|
|
const headers = {
|
|
"Content-Type": this.contentType
|
|
};
|
|
const contentLength = __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getContentLength).call(this);
|
|
if (contentLength) {
|
|
this.contentLength = contentLength;
|
|
headers["Content-Length"] = contentLength;
|
|
}
|
|
this.headers = proxyHeaders(Object.freeze(headers));
|
|
Object.defineProperties(this, {
|
|
boundary: readonlyProp,
|
|
contentType: readonlyProp,
|
|
contentLength: readonlyProp,
|
|
headers: readonlyProp
|
|
});
|
|
}
|
|
getContentLength() {
|
|
return this.contentLength == null ? undefined : Number(this.contentLength);
|
|
}
|
|
*values() {
|
|
for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, "f")) {
|
|
const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(normalizeValue(raw));
|
|
yield __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value);
|
|
yield value;
|
|
yield __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, "f");
|
|
}
|
|
yield __classPrivateFieldGet(this, _FormDataEncoder_footer, "f");
|
|
}
|
|
async *encode() {
|
|
for (const part of this.values()) {
|
|
if (isFile(part)) {
|
|
yield* part.stream();
|
|
}
|
|
else {
|
|
yield part;
|
|
}
|
|
}
|
|
}
|
|
[(_FormDataEncoder_CRLF = new WeakMap(), _FormDataEncoder_CRLF_BYTES = new WeakMap(), _FormDataEncoder_CRLF_BYTES_LENGTH = new WeakMap(), _FormDataEncoder_DASHES = new WeakMap(), _FormDataEncoder_encoder = new WeakMap(), _FormDataEncoder_footer = new WeakMap(), _FormDataEncoder_form = new WeakMap(), _FormDataEncoder_options = new WeakMap(), _FormDataEncoder_instances = new WeakSet(), _FormDataEncoder_getFieldHeader = function _FormDataEncoder_getFieldHeader(name, value) {
|
|
let header = "";
|
|
header += `${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}`;
|
|
header += `Content-Disposition: form-data; name="${escapeName(name)}"`;
|
|
if (isFile(value)) {
|
|
header += `; filename="${escapeName(value.name)}"${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}`;
|
|
header += `Content-Type: ${value.type || "application/octet-stream"}`;
|
|
}
|
|
const size = isFile(value) ? value.size : value.byteLength;
|
|
if (__classPrivateFieldGet(this, _FormDataEncoder_options, "f").enableAdditionalHeaders === true
|
|
&& size != null
|
|
&& !isNaN(size)) {
|
|
header += `${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}Content-Length: ${isFile(value) ? value.size : value.byteLength}`;
|
|
}
|
|
return __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(`${header}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f").repeat(2)}`);
|
|
}, _FormDataEncoder_getContentLength = function _FormDataEncoder_getContentLength() {
|
|
let length = 0;
|
|
for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, "f")) {
|
|
const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(normalizeValue(raw));
|
|
const size = isFile(value) ? value.size : value.byteLength;
|
|
if (size == null || isNaN(size)) {
|
|
return undefined;
|
|
}
|
|
length += __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value).byteLength;
|
|
length += size;
|
|
length += __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, "f");
|
|
}
|
|
return String(length + __classPrivateFieldGet(this, _FormDataEncoder_footer, "f").byteLength);
|
|
}, Symbol.iterator)]() {
|
|
return this.values();
|
|
}
|
|
[Symbol.asyncIterator]() {
|
|
return this.encode();
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: external "node:util"
|
|
const external_node_util_namespaceObject = require("node:util");
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-form-data.js
|
|
|
|
function is_form_data_isFormData(body) {
|
|
return dist.nodeStream(body) && dist.function_(body.getBoundary);
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/get-body-size.js
|
|
|
|
|
|
|
|
|
|
async function getBodySize(body, headers) {
|
|
if (headers && 'content-length' in headers) {
|
|
return Number(headers['content-length']);
|
|
}
|
|
if (!body) {
|
|
return 0;
|
|
}
|
|
if (dist.string(body)) {
|
|
return external_node_buffer_namespaceObject.Buffer.byteLength(body);
|
|
}
|
|
if (dist.buffer(body)) {
|
|
return body.length;
|
|
}
|
|
if (is_form_data_isFormData(body)) {
|
|
return (0,external_node_util_namespaceObject.promisify)(body.getLength.bind(body))();
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/proxy-events.js
|
|
function proxyEvents(from, to, events) {
|
|
const eventFunctions = {};
|
|
for (const event of events) {
|
|
const eventFunction = (...args) => {
|
|
to.emit(event, ...args);
|
|
};
|
|
eventFunctions[event] = eventFunction;
|
|
from.on(event, eventFunction);
|
|
}
|
|
return () => {
|
|
for (const [event, eventFunction] of Object.entries(eventFunctions)) {
|
|
from.off(event, eventFunction);
|
|
}
|
|
};
|
|
}
|
|
|
|
;// CONCATENATED MODULE: external "node:net"
|
|
const external_node_net_namespaceObject = require("node:net");
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/unhandle.js
|
|
// When attaching listeners, it's very easy to forget about them.
|
|
// Especially if you do error handling and set timeouts.
|
|
// So instead of checking if it's proper to throw an error on every timeout ever,
|
|
// use this simple tool which will remove all listeners you have attached.
|
|
function unhandle() {
|
|
const handlers = [];
|
|
return {
|
|
once(origin, event, fn) {
|
|
origin.once(event, fn);
|
|
handlers.push({ origin, event, fn });
|
|
},
|
|
unhandleAll() {
|
|
for (const handler of handlers) {
|
|
const { origin, event, fn } = handler;
|
|
origin.removeListener(event, fn);
|
|
}
|
|
handlers.length = 0;
|
|
},
|
|
};
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/timed-out.js
|
|
|
|
|
|
const reentry = Symbol('reentry');
|
|
const noop = () => { };
|
|
class timed_out_TimeoutError extends Error {
|
|
constructor(threshold, event) {
|
|
super(`Timeout awaiting '${event}' for ${threshold}ms`);
|
|
Object.defineProperty(this, "event", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: event
|
|
});
|
|
Object.defineProperty(this, "code", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
this.name = 'TimeoutError';
|
|
this.code = 'ETIMEDOUT';
|
|
}
|
|
}
|
|
function timedOut(request, delays, options) {
|
|
if (reentry in request) {
|
|
return noop;
|
|
}
|
|
request[reentry] = true;
|
|
const cancelers = [];
|
|
const { once, unhandleAll } = unhandle();
|
|
const addTimeout = (delay, callback, event) => {
|
|
const timeout = setTimeout(callback, delay, delay, event);
|
|
timeout.unref?.();
|
|
const cancel = () => {
|
|
clearTimeout(timeout);
|
|
};
|
|
cancelers.push(cancel);
|
|
return cancel;
|
|
};
|
|
const { host, hostname } = options;
|
|
const timeoutHandler = (delay, event) => {
|
|
request.destroy(new timed_out_TimeoutError(delay, event));
|
|
};
|
|
const cancelTimeouts = () => {
|
|
for (const cancel of cancelers) {
|
|
cancel();
|
|
}
|
|
unhandleAll();
|
|
};
|
|
request.once('error', error => {
|
|
cancelTimeouts();
|
|
// Save original behavior
|
|
/* istanbul ignore next */
|
|
if (request.listenerCount('error') === 0) {
|
|
throw error;
|
|
}
|
|
});
|
|
if (typeof delays.request !== 'undefined') {
|
|
const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request');
|
|
once(request, 'response', (response) => {
|
|
once(response, 'end', cancelTimeout);
|
|
});
|
|
}
|
|
if (typeof delays.socket !== 'undefined') {
|
|
const { socket } = delays;
|
|
const socketTimeoutHandler = () => {
|
|
timeoutHandler(socket, 'socket');
|
|
};
|
|
request.setTimeout(socket, socketTimeoutHandler);
|
|
// `request.setTimeout(0)` causes a memory leak.
|
|
// We can just remove the listener and forget about the timer - it's unreffed.
|
|
// See https://github.com/sindresorhus/got/issues/690
|
|
cancelers.push(() => {
|
|
request.removeListener('timeout', socketTimeoutHandler);
|
|
});
|
|
}
|
|
const hasLookup = typeof delays.lookup !== 'undefined';
|
|
const hasConnect = typeof delays.connect !== 'undefined';
|
|
const hasSecureConnect = typeof delays.secureConnect !== 'undefined';
|
|
const hasSend = typeof delays.send !== 'undefined';
|
|
if (hasLookup || hasConnect || hasSecureConnect || hasSend) {
|
|
once(request, 'socket', (socket) => {
|
|
const { socketPath } = request;
|
|
/* istanbul ignore next: hard to test */
|
|
if (socket.connecting) {
|
|
const hasPath = Boolean(socketPath ?? external_node_net_namespaceObject.isIP(hostname ?? host ?? '') !== 0);
|
|
if (hasLookup && !hasPath && typeof socket.address().address === 'undefined') {
|
|
const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
|
|
once(socket, 'lookup', cancelTimeout);
|
|
}
|
|
if (hasConnect) {
|
|
const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
|
|
if (hasPath) {
|
|
once(socket, 'connect', timeConnect());
|
|
}
|
|
else {
|
|
once(socket, 'lookup', (error) => {
|
|
if (error === null) {
|
|
once(socket, 'connect', timeConnect());
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (hasSecureConnect && options.protocol === 'https:') {
|
|
once(socket, 'connect', () => {
|
|
const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
|
|
once(socket, 'secureConnect', cancelTimeout);
|
|
});
|
|
}
|
|
}
|
|
if (hasSend) {
|
|
const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
|
|
/* istanbul ignore next: hard to test */
|
|
if (socket.connecting) {
|
|
once(socket, 'connect', () => {
|
|
once(request, 'upload-complete', timeRequest());
|
|
});
|
|
}
|
|
else {
|
|
once(request, 'upload-complete', timeRequest());
|
|
}
|
|
}
|
|
});
|
|
}
|
|
if (typeof delays.response !== 'undefined') {
|
|
once(request, 'upload-complete', () => {
|
|
const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
|
|
once(request, 'response', cancelTimeout);
|
|
});
|
|
}
|
|
if (typeof delays.read !== 'undefined') {
|
|
once(request, 'response', (response) => {
|
|
const cancelTimeout = addTimeout(delays.read, timeoutHandler, 'read');
|
|
once(response, 'end', cancelTimeout);
|
|
});
|
|
}
|
|
return cancelTimeouts;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/url-to-options.js
|
|
|
|
function urlToOptions(url) {
|
|
// Cast to URL
|
|
url = url;
|
|
const options = {
|
|
protocol: url.protocol,
|
|
hostname: dist.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
|
|
host: url.host,
|
|
hash: url.hash,
|
|
search: url.search,
|
|
pathname: url.pathname,
|
|
href: url.href,
|
|
path: `${url.pathname || ''}${url.search || ''}`,
|
|
};
|
|
if (dist.string(url.port) && url.port.length > 0) {
|
|
options.port = Number(url.port);
|
|
}
|
|
if (url.username || url.password) {
|
|
options.auth = `${url.username || ''}:${url.password || ''}`;
|
|
}
|
|
return options;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/weakable-map.js
|
|
class WeakableMap {
|
|
constructor() {
|
|
Object.defineProperty(this, "weakMap", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "map", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
this.weakMap = new WeakMap();
|
|
this.map = new Map();
|
|
}
|
|
set(key, value) {
|
|
if (typeof key === 'object') {
|
|
this.weakMap.set(key, value);
|
|
}
|
|
else {
|
|
this.map.set(key, value);
|
|
}
|
|
}
|
|
get(key) {
|
|
if (typeof key === 'object') {
|
|
return this.weakMap.get(key);
|
|
}
|
|
return this.map.get(key);
|
|
}
|
|
has(key) {
|
|
if (typeof key === 'object') {
|
|
return this.weakMap.has(key);
|
|
}
|
|
return this.map.has(key);
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/calculate-retry-delay.js
|
|
const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter, computedValue, }) => {
|
|
if (error.name === 'RetryError') {
|
|
return 1;
|
|
}
|
|
if (attemptCount > retryOptions.limit) {
|
|
return 0;
|
|
}
|
|
const hasMethod = retryOptions.methods.includes(error.options.method);
|
|
const hasErrorCode = retryOptions.errorCodes.includes(error.code);
|
|
const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);
|
|
if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
|
|
return 0;
|
|
}
|
|
if (error.response) {
|
|
if (retryAfter) {
|
|
// In this case `computedValue` is `options.request.timeout`
|
|
if (retryAfter > computedValue) {
|
|
return 0;
|
|
}
|
|
return retryAfter;
|
|
}
|
|
if (error.response.statusCode === 413) {
|
|
return 0;
|
|
}
|
|
}
|
|
const noise = Math.random() * retryOptions.noise;
|
|
return Math.min(((2 ** (attemptCount - 1)) * 1000), retryOptions.backoffLimit) + noise;
|
|
};
|
|
/* harmony default export */ const calculate_retry_delay = (calculateRetryDelay);
|
|
|
|
;// CONCATENATED MODULE: external "node:tls"
|
|
const external_node_tls_namespaceObject = require("node:tls");
|
|
;// CONCATENATED MODULE: external "node:https"
|
|
const external_node_https_namespaceObject = require("node:https");
|
|
;// CONCATENATED MODULE: ./node_modules/lowercase-keys/index.js
|
|
function lowercaseKeys(object) {
|
|
return Object.fromEntries(Object.entries(object).map(([key, value]) => [key.toLowerCase(), value]));
|
|
}
|
|
|
|
// EXTERNAL MODULE: ./node_modules/cacheable-lookup/source/index.js
|
|
var cacheable_lookup_source = __nccwpck_require__(2286);
|
|
// EXTERNAL MODULE: ./node_modules/http2-wrapper/source/index.js
|
|
var http2_wrapper_source = __nccwpck_require__(4645);
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/parse-link-header.js
|
|
function parseLinkHeader(link) {
|
|
const parsed = [];
|
|
const items = link.split(',');
|
|
for (const item of items) {
|
|
// https://tools.ietf.org/html/rfc5988#section-5
|
|
const [rawUriReference, ...rawLinkParameters] = item.split(';');
|
|
const trimmedUriReference = rawUriReference.trim();
|
|
// eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
|
|
if (trimmedUriReference[0] !== '<' || trimmedUriReference[trimmedUriReference.length - 1] !== '>') {
|
|
throw new Error(`Invalid format of the Link header reference: ${trimmedUriReference}`);
|
|
}
|
|
const reference = trimmedUriReference.slice(1, -1);
|
|
const parameters = {};
|
|
if (rawLinkParameters.length === 0) {
|
|
throw new Error(`Unexpected end of Link header parameters: ${rawLinkParameters.join(';')}`);
|
|
}
|
|
for (const rawParameter of rawLinkParameters) {
|
|
const trimmedRawParameter = rawParameter.trim();
|
|
const center = trimmedRawParameter.indexOf('=');
|
|
if (center === -1) {
|
|
throw new Error(`Failed to parse Link header: ${link}`);
|
|
}
|
|
const name = trimmedRawParameter.slice(0, center).trim();
|
|
const value = trimmedRawParameter.slice(center + 1).trim();
|
|
parameters[name] = value;
|
|
}
|
|
parsed.push({
|
|
reference,
|
|
parameters,
|
|
});
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/options.js
|
|
|
|
|
|
|
|
|
|
// DO NOT use destructuring for `https.request` and `http.request` as it's not compatible with `nock`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const [major, minor] = external_node_process_namespaceObject.versions.node.split('.').map(Number);
|
|
function validateSearchParameters(searchParameters) {
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in searchParameters) {
|
|
const value = searchParameters[key];
|
|
assert.any([dist.string, dist.number, dist.boolean, dist.null_, dist.undefined], value);
|
|
}
|
|
}
|
|
const globalCache = new Map();
|
|
let globalDnsCache;
|
|
const getGlobalDnsCache = () => {
|
|
if (globalDnsCache) {
|
|
return globalDnsCache;
|
|
}
|
|
globalDnsCache = new cacheable_lookup_source();
|
|
return globalDnsCache;
|
|
};
|
|
const defaultInternals = {
|
|
request: undefined,
|
|
agent: {
|
|
http: undefined,
|
|
https: undefined,
|
|
http2: undefined,
|
|
},
|
|
h2session: undefined,
|
|
decompress: true,
|
|
timeout: {
|
|
connect: undefined,
|
|
lookup: undefined,
|
|
read: undefined,
|
|
request: undefined,
|
|
response: undefined,
|
|
secureConnect: undefined,
|
|
send: undefined,
|
|
socket: undefined,
|
|
},
|
|
prefixUrl: '',
|
|
body: undefined,
|
|
form: undefined,
|
|
json: undefined,
|
|
cookieJar: undefined,
|
|
ignoreInvalidCookies: false,
|
|
searchParams: undefined,
|
|
dnsLookup: undefined,
|
|
dnsCache: undefined,
|
|
context: {},
|
|
hooks: {
|
|
init: [],
|
|
beforeRequest: [],
|
|
beforeError: [],
|
|
beforeRedirect: [],
|
|
beforeRetry: [],
|
|
afterResponse: [],
|
|
},
|
|
followRedirect: true,
|
|
maxRedirects: 10,
|
|
cache: undefined,
|
|
throwHttpErrors: true,
|
|
username: '',
|
|
password: '',
|
|
http2: false,
|
|
allowGetBody: false,
|
|
headers: {
|
|
'user-agent': 'got (https://github.com/sindresorhus/got)',
|
|
},
|
|
methodRewriting: false,
|
|
dnsLookupIpVersion: undefined,
|
|
parseJson: JSON.parse,
|
|
stringifyJson: JSON.stringify,
|
|
retry: {
|
|
limit: 2,
|
|
methods: [
|
|
'GET',
|
|
'PUT',
|
|
'HEAD',
|
|
'DELETE',
|
|
'OPTIONS',
|
|
'TRACE',
|
|
],
|
|
statusCodes: [
|
|
408,
|
|
413,
|
|
429,
|
|
500,
|
|
502,
|
|
503,
|
|
504,
|
|
521,
|
|
522,
|
|
524,
|
|
],
|
|
errorCodes: [
|
|
'ETIMEDOUT',
|
|
'ECONNRESET',
|
|
'EADDRINUSE',
|
|
'ECONNREFUSED',
|
|
'EPIPE',
|
|
'ENOTFOUND',
|
|
'ENETUNREACH',
|
|
'EAI_AGAIN',
|
|
],
|
|
maxRetryAfter: undefined,
|
|
calculateDelay: ({ computedValue }) => computedValue,
|
|
backoffLimit: Number.POSITIVE_INFINITY,
|
|
noise: 100,
|
|
},
|
|
localAddress: undefined,
|
|
method: 'GET',
|
|
createConnection: undefined,
|
|
cacheOptions: {
|
|
shared: undefined,
|
|
cacheHeuristic: undefined,
|
|
immutableMinTimeToLive: undefined,
|
|
ignoreCargoCult: undefined,
|
|
},
|
|
https: {
|
|
alpnProtocols: undefined,
|
|
rejectUnauthorized: undefined,
|
|
checkServerIdentity: undefined,
|
|
certificateAuthority: undefined,
|
|
key: undefined,
|
|
certificate: undefined,
|
|
passphrase: undefined,
|
|
pfx: undefined,
|
|
ciphers: undefined,
|
|
honorCipherOrder: undefined,
|
|
minVersion: undefined,
|
|
maxVersion: undefined,
|
|
signatureAlgorithms: undefined,
|
|
tlsSessionLifetime: undefined,
|
|
dhparam: undefined,
|
|
ecdhCurve: undefined,
|
|
certificateRevocationLists: undefined,
|
|
},
|
|
encoding: undefined,
|
|
resolveBodyOnly: false,
|
|
isStream: false,
|
|
responseType: 'text',
|
|
url: undefined,
|
|
pagination: {
|
|
transform(response) {
|
|
if (response.request.options.responseType === 'json') {
|
|
return response.body;
|
|
}
|
|
return JSON.parse(response.body);
|
|
},
|
|
paginate({ response }) {
|
|
const rawLinkHeader = response.headers.link;
|
|
if (typeof rawLinkHeader !== 'string' || rawLinkHeader.trim() === '') {
|
|
return false;
|
|
}
|
|
const parsed = parseLinkHeader(rawLinkHeader);
|
|
const next = parsed.find(entry => entry.parameters.rel === 'next' || entry.parameters.rel === '"next"');
|
|
if (next) {
|
|
return {
|
|
url: new external_node_url_namespaceObject.URL(next.reference, response.url),
|
|
};
|
|
}
|
|
return false;
|
|
},
|
|
filter: () => true,
|
|
shouldContinue: () => true,
|
|
countLimit: Number.POSITIVE_INFINITY,
|
|
backoff: 0,
|
|
requestLimit: 10000,
|
|
stackAllItems: false,
|
|
},
|
|
setHost: true,
|
|
maxHeaderSize: undefined,
|
|
signal: undefined,
|
|
enableUnixSockets: true,
|
|
};
|
|
const cloneInternals = (internals) => {
|
|
const { hooks, retry } = internals;
|
|
const result = {
|
|
...internals,
|
|
context: { ...internals.context },
|
|
cacheOptions: { ...internals.cacheOptions },
|
|
https: { ...internals.https },
|
|
agent: { ...internals.agent },
|
|
headers: { ...internals.headers },
|
|
retry: {
|
|
...retry,
|
|
errorCodes: [...retry.errorCodes],
|
|
methods: [...retry.methods],
|
|
statusCodes: [...retry.statusCodes],
|
|
},
|
|
timeout: { ...internals.timeout },
|
|
hooks: {
|
|
init: [...hooks.init],
|
|
beforeRequest: [...hooks.beforeRequest],
|
|
beforeError: [...hooks.beforeError],
|
|
beforeRedirect: [...hooks.beforeRedirect],
|
|
beforeRetry: [...hooks.beforeRetry],
|
|
afterResponse: [...hooks.afterResponse],
|
|
},
|
|
searchParams: internals.searchParams ? new external_node_url_namespaceObject.URLSearchParams(internals.searchParams) : undefined,
|
|
pagination: { ...internals.pagination },
|
|
};
|
|
if (result.url !== undefined) {
|
|
result.prefixUrl = '';
|
|
}
|
|
return result;
|
|
};
|
|
const cloneRaw = (raw) => {
|
|
const { hooks, retry } = raw;
|
|
const result = { ...raw };
|
|
if (dist.object(raw.context)) {
|
|
result.context = { ...raw.context };
|
|
}
|
|
if (dist.object(raw.cacheOptions)) {
|
|
result.cacheOptions = { ...raw.cacheOptions };
|
|
}
|
|
if (dist.object(raw.https)) {
|
|
result.https = { ...raw.https };
|
|
}
|
|
if (dist.object(raw.cacheOptions)) {
|
|
result.cacheOptions = { ...result.cacheOptions };
|
|
}
|
|
if (dist.object(raw.agent)) {
|
|
result.agent = { ...raw.agent };
|
|
}
|
|
if (dist.object(raw.headers)) {
|
|
result.headers = { ...raw.headers };
|
|
}
|
|
if (dist.object(retry)) {
|
|
result.retry = { ...retry };
|
|
if (dist.array(retry.errorCodes)) {
|
|
result.retry.errorCodes = [...retry.errorCodes];
|
|
}
|
|
if (dist.array(retry.methods)) {
|
|
result.retry.methods = [...retry.methods];
|
|
}
|
|
if (dist.array(retry.statusCodes)) {
|
|
result.retry.statusCodes = [...retry.statusCodes];
|
|
}
|
|
}
|
|
if (dist.object(raw.timeout)) {
|
|
result.timeout = { ...raw.timeout };
|
|
}
|
|
if (dist.object(hooks)) {
|
|
result.hooks = {
|
|
...hooks,
|
|
};
|
|
if (dist.array(hooks.init)) {
|
|
result.hooks.init = [...hooks.init];
|
|
}
|
|
if (dist.array(hooks.beforeRequest)) {
|
|
result.hooks.beforeRequest = [...hooks.beforeRequest];
|
|
}
|
|
if (dist.array(hooks.beforeError)) {
|
|
result.hooks.beforeError = [...hooks.beforeError];
|
|
}
|
|
if (dist.array(hooks.beforeRedirect)) {
|
|
result.hooks.beforeRedirect = [...hooks.beforeRedirect];
|
|
}
|
|
if (dist.array(hooks.beforeRetry)) {
|
|
result.hooks.beforeRetry = [...hooks.beforeRetry];
|
|
}
|
|
if (dist.array(hooks.afterResponse)) {
|
|
result.hooks.afterResponse = [...hooks.afterResponse];
|
|
}
|
|
}
|
|
// TODO: raw.searchParams
|
|
if (dist.object(raw.pagination)) {
|
|
result.pagination = { ...raw.pagination };
|
|
}
|
|
return result;
|
|
};
|
|
const getHttp2TimeoutOption = (internals) => {
|
|
const delays = [internals.timeout.socket, internals.timeout.connect, internals.timeout.lookup, internals.timeout.request, internals.timeout.secureConnect].filter(delay => typeof delay === 'number');
|
|
if (delays.length > 0) {
|
|
return Math.min(...delays);
|
|
}
|
|
return undefined;
|
|
};
|
|
const init = (options, withOptions, self) => {
|
|
const initHooks = options.hooks?.init;
|
|
if (initHooks) {
|
|
for (const hook of initHooks) {
|
|
hook(withOptions, self);
|
|
}
|
|
}
|
|
};
|
|
class Options {
|
|
constructor(input, options, defaults) {
|
|
Object.defineProperty(this, "_unixOptions", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_internals", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_merging", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_init", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
assert.any([dist.string, dist.urlInstance, dist.object, dist.undefined], input);
|
|
assert.any([dist.object, dist.undefined], options);
|
|
assert.any([dist.object, dist.undefined], defaults);
|
|
if (input instanceof Options || options instanceof Options) {
|
|
throw new TypeError('The defaults must be passed as the third argument');
|
|
}
|
|
this._internals = cloneInternals(defaults?._internals ?? defaults ?? defaultInternals);
|
|
this._init = [...(defaults?._init ?? [])];
|
|
this._merging = false;
|
|
this._unixOptions = undefined;
|
|
// This rule allows `finally` to be considered more important.
|
|
// Meaning no matter the error thrown in the `try` block,
|
|
// if `finally` throws then the `finally` error will be thrown.
|
|
//
|
|
// Yes, we want this. If we set `url` first, then the `url.searchParams`
|
|
// would get merged. Instead we set the `searchParams` first, then
|
|
// `url.searchParams` is overwritten as expected.
|
|
//
|
|
/* eslint-disable no-unsafe-finally */
|
|
try {
|
|
if (dist.plainObject(input)) {
|
|
try {
|
|
this.merge(input);
|
|
this.merge(options);
|
|
}
|
|
finally {
|
|
this.url = input.url;
|
|
}
|
|
}
|
|
else {
|
|
try {
|
|
this.merge(options);
|
|
}
|
|
finally {
|
|
if (options?.url !== undefined) {
|
|
if (input === undefined) {
|
|
this.url = options.url;
|
|
}
|
|
else {
|
|
throw new TypeError('The `url` option is mutually exclusive with the `input` argument');
|
|
}
|
|
}
|
|
else if (input !== undefined) {
|
|
this.url = input;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (error) {
|
|
error.options = this;
|
|
throw error;
|
|
}
|
|
/* eslint-enable no-unsafe-finally */
|
|
}
|
|
merge(options) {
|
|
if (!options) {
|
|
return;
|
|
}
|
|
if (options instanceof Options) {
|
|
for (const init of options._init) {
|
|
this.merge(init);
|
|
}
|
|
return;
|
|
}
|
|
options = cloneRaw(options);
|
|
init(this, options, this);
|
|
init(options, options, this);
|
|
this._merging = true;
|
|
// Always merge `isStream` first
|
|
if ('isStream' in options) {
|
|
this.isStream = options.isStream;
|
|
}
|
|
try {
|
|
let push = false;
|
|
for (const key in options) {
|
|
// `got.extend()` options
|
|
if (key === 'mutableDefaults' || key === 'handlers') {
|
|
continue;
|
|
}
|
|
// Never merge `url`
|
|
if (key === 'url') {
|
|
continue;
|
|
}
|
|
if (!(key in this)) {
|
|
throw new Error(`Unexpected option: ${key}`);
|
|
}
|
|
// @ts-expect-error Type 'unknown' is not assignable to type 'never'.
|
|
this[key] = options[key];
|
|
push = true;
|
|
}
|
|
if (push) {
|
|
this._init.push(options);
|
|
}
|
|
}
|
|
finally {
|
|
this._merging = false;
|
|
}
|
|
}
|
|
/**
|
|
Custom request function.
|
|
The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper).
|
|
|
|
@default http.request | https.request
|
|
*/
|
|
get request() {
|
|
return this._internals.request;
|
|
}
|
|
set request(value) {
|
|
assert.any([dist.function_, dist.undefined], value);
|
|
this._internals.request = value;
|
|
}
|
|
/**
|
|
An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance.
|
|
This is necessary because a request to one protocol might redirect to another.
|
|
In such a scenario, Got will switch over to the right protocol agent for you.
|
|
|
|
If a key is not present, it will default to a global agent.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
import HttpAgent from 'agentkeepalive';
|
|
|
|
const {HttpsAgent} = HttpAgent;
|
|
|
|
await got('https://sindresorhus.com', {
|
|
agent: {
|
|
http: new HttpAgent(),
|
|
https: new HttpsAgent()
|
|
}
|
|
});
|
|
```
|
|
*/
|
|
get agent() {
|
|
return this._internals.agent;
|
|
}
|
|
set agent(value) {
|
|
assert.plainObject(value);
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in value) {
|
|
if (!(key in this._internals.agent)) {
|
|
throw new TypeError(`Unexpected agent option: ${key}`);
|
|
}
|
|
assert.any([dist.object, dist.undefined], value[key]);
|
|
}
|
|
if (this._merging) {
|
|
Object.assign(this._internals.agent, value);
|
|
}
|
|
else {
|
|
this._internals.agent = { ...value };
|
|
}
|
|
}
|
|
get h2session() {
|
|
return this._internals.h2session;
|
|
}
|
|
set h2session(value) {
|
|
this._internals.h2session = value;
|
|
}
|
|
/**
|
|
Decompress the response automatically.
|
|
|
|
This will set the `accept-encoding` header to `gzip, deflate, br` unless you set it yourself.
|
|
|
|
If this is disabled, a compressed response is returned as a `Buffer`.
|
|
This may be useful if you want to handle decompression yourself or stream the raw compressed data.
|
|
|
|
@default true
|
|
*/
|
|
get decompress() {
|
|
return this._internals.decompress;
|
|
}
|
|
set decompress(value) {
|
|
assert.boolean(value);
|
|
this._internals.decompress = value;
|
|
}
|
|
/**
|
|
Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property).
|
|
By default, there's no timeout.
|
|
|
|
This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle:
|
|
|
|
- `lookup` starts when a socket is assigned and ends when the hostname has been resolved.
|
|
Does not apply when using a Unix domain socket.
|
|
- `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected.
|
|
- `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only).
|
|
- `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback).
|
|
- `response` starts when the request has been written to the socket and ends when the response headers are received.
|
|
- `send` starts when the socket is connected and ends with the request has been written to the socket.
|
|
- `request` starts when the request is initiated and ends when the response's end event fires.
|
|
*/
|
|
get timeout() {
|
|
// We always return `Delays` here.
|
|
// It has to be `Delays | number`, otherwise TypeScript will error because the getter and the setter have incompatible types.
|
|
return this._internals.timeout;
|
|
}
|
|
set timeout(value) {
|
|
assert.plainObject(value);
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in value) {
|
|
if (!(key in this._internals.timeout)) {
|
|
throw new Error(`Unexpected timeout option: ${key}`);
|
|
}
|
|
assert.any([dist.number, dist.undefined], value[key]);
|
|
}
|
|
if (this._merging) {
|
|
Object.assign(this._internals.timeout, value);
|
|
}
|
|
else {
|
|
this._internals.timeout = { ...value };
|
|
}
|
|
}
|
|
/**
|
|
When specified, `prefixUrl` will be prepended to `url`.
|
|
The prefix can be any valid URL, either relative or absolute.
|
|
A trailing slash `/` is optional - one will be added automatically.
|
|
|
|
__Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance.
|
|
|
|
__Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion.
|
|
For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`.
|
|
The latter is used by browsers.
|
|
|
|
__Tip__: Useful when used with `got.extend()` to create niche-specific Got instances.
|
|
|
|
__Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`.
|
|
If the URL doesn't include it anymore, it will throw.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
await got('unicorn', {prefixUrl: 'https://cats.com'});
|
|
//=> 'https://cats.com/unicorn'
|
|
|
|
const instance = got.extend({
|
|
prefixUrl: 'https://google.com'
|
|
});
|
|
|
|
await instance('unicorn', {
|
|
hooks: {
|
|
beforeRequest: [
|
|
options => {
|
|
options.prefixUrl = 'https://cats.com';
|
|
}
|
|
]
|
|
}
|
|
});
|
|
//=> 'https://cats.com/unicorn'
|
|
```
|
|
*/
|
|
get prefixUrl() {
|
|
// We always return `string` here.
|
|
// It has to be `string | URL`, otherwise TypeScript will error because the getter and the setter have incompatible types.
|
|
return this._internals.prefixUrl;
|
|
}
|
|
set prefixUrl(value) {
|
|
assert.any([dist.string, dist.urlInstance], value);
|
|
if (value === '') {
|
|
this._internals.prefixUrl = '';
|
|
return;
|
|
}
|
|
value = value.toString();
|
|
if (!value.endsWith('/')) {
|
|
value += '/';
|
|
}
|
|
if (this._internals.prefixUrl && this._internals.url) {
|
|
const { href } = this._internals.url;
|
|
this._internals.url.href = value + href.slice(this._internals.prefixUrl.length);
|
|
}
|
|
this._internals.prefixUrl = value;
|
|
}
|
|
/**
|
|
__Note #1__: The `body` option cannot be used with the `json` or `form` option.
|
|
|
|
__Note #2__: If you provide this option, `got.stream()` will be read-only.
|
|
|
|
__Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`.
|
|
|
|
__Note #4__: This option is not enumerable and will not be merged with the instance defaults.
|
|
|
|
The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`.
|
|
|
|
Since Got 12, the `content-length` is not automatically set when `body` is a `fs.createReadStream`.
|
|
*/
|
|
get body() {
|
|
return this._internals.body;
|
|
}
|
|
set body(value) {
|
|
assert.any([dist.string, dist.buffer, dist.nodeStream, dist.generator, dist.asyncGenerator, isFormData, dist.undefined], value);
|
|
if (dist.nodeStream(value)) {
|
|
assert.truthy(value.readable);
|
|
}
|
|
if (value !== undefined) {
|
|
assert.undefined(this._internals.form);
|
|
assert.undefined(this._internals.json);
|
|
}
|
|
this._internals.body = value;
|
|
}
|
|
/**
|
|
The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj).
|
|
|
|
If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`.
|
|
|
|
__Note #1__: If you provide this option, `got.stream()` will be read-only.
|
|
|
|
__Note #2__: This option is not enumerable and will not be merged with the instance defaults.
|
|
*/
|
|
get form() {
|
|
return this._internals.form;
|
|
}
|
|
set form(value) {
|
|
assert.any([dist.plainObject, dist.undefined], value);
|
|
if (value !== undefined) {
|
|
assert.undefined(this._internals.body);
|
|
assert.undefined(this._internals.json);
|
|
}
|
|
this._internals.form = value;
|
|
}
|
|
/**
|
|
JSON body. If the `Content-Type` header is not set, it will be set to `application/json`.
|
|
|
|
__Note #1__: If you provide this option, `got.stream()` will be read-only.
|
|
|
|
__Note #2__: This option is not enumerable and will not be merged with the instance defaults.
|
|
*/
|
|
get json() {
|
|
return this._internals.json;
|
|
}
|
|
set json(value) {
|
|
if (value !== undefined) {
|
|
assert.undefined(this._internals.body);
|
|
assert.undefined(this._internals.form);
|
|
}
|
|
this._internals.json = value;
|
|
}
|
|
/**
|
|
The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url).
|
|
|
|
Properties from `options` will override properties in the parsed `url`.
|
|
|
|
If no protocol is specified, it will throw a `TypeError`.
|
|
|
|
__Note__: The query string is **not** parsed as search params.
|
|
|
|
@example
|
|
```
|
|
await got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b
|
|
await got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b
|
|
|
|
// The query string is overridden by `searchParams`
|
|
await got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b
|
|
```
|
|
*/
|
|
get url() {
|
|
return this._internals.url;
|
|
}
|
|
set url(value) {
|
|
assert.any([dist.string, dist.urlInstance, dist.undefined], value);
|
|
if (value === undefined) {
|
|
this._internals.url = undefined;
|
|
return;
|
|
}
|
|
if (dist.string(value) && value.startsWith('/')) {
|
|
throw new Error('`url` must not start with a slash');
|
|
}
|
|
const urlString = `${this.prefixUrl}${value.toString()}`;
|
|
const url = new external_node_url_namespaceObject.URL(urlString);
|
|
this._internals.url = url;
|
|
decodeURI(urlString);
|
|
if (url.protocol === 'unix:') {
|
|
url.href = `http://unix${url.pathname}${url.search}`;
|
|
}
|
|
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
const error = new Error(`Unsupported protocol: ${url.protocol}`);
|
|
error.code = 'ERR_UNSUPPORTED_PROTOCOL';
|
|
throw error;
|
|
}
|
|
if (this._internals.username) {
|
|
url.username = this._internals.username;
|
|
this._internals.username = '';
|
|
}
|
|
if (this._internals.password) {
|
|
url.password = this._internals.password;
|
|
this._internals.password = '';
|
|
}
|
|
if (this._internals.searchParams) {
|
|
url.search = this._internals.searchParams.toString();
|
|
this._internals.searchParams = undefined;
|
|
}
|
|
if (url.hostname === 'unix') {
|
|
if (!this._internals.enableUnixSockets) {
|
|
throw new Error('Using UNIX domain sockets but option `enableUnixSockets` is not enabled');
|
|
}
|
|
const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`);
|
|
if (matches?.groups) {
|
|
const { socketPath, path } = matches.groups;
|
|
this._unixOptions = {
|
|
socketPath,
|
|
path,
|
|
host: '',
|
|
};
|
|
}
|
|
else {
|
|
this._unixOptions = undefined;
|
|
}
|
|
return;
|
|
}
|
|
this._unixOptions = undefined;
|
|
}
|
|
/**
|
|
Cookie support. You don't have to care about parsing or how to store them.
|
|
|
|
__Note__: If you provide this option, `options.headers.cookie` will be overridden.
|
|
*/
|
|
get cookieJar() {
|
|
return this._internals.cookieJar;
|
|
}
|
|
set cookieJar(value) {
|
|
assert.any([dist.object, dist.undefined], value);
|
|
if (value === undefined) {
|
|
this._internals.cookieJar = undefined;
|
|
return;
|
|
}
|
|
let { setCookie, getCookieString } = value;
|
|
assert.function_(setCookie);
|
|
assert.function_(getCookieString);
|
|
/* istanbul ignore next: Horrible `tough-cookie` v3 check */
|
|
if (setCookie.length === 4 && getCookieString.length === 0) {
|
|
setCookie = (0,external_node_util_namespaceObject.promisify)(setCookie.bind(value));
|
|
getCookieString = (0,external_node_util_namespaceObject.promisify)(getCookieString.bind(value));
|
|
this._internals.cookieJar = {
|
|
setCookie,
|
|
getCookieString: getCookieString,
|
|
};
|
|
}
|
|
else {
|
|
this._internals.cookieJar = value;
|
|
}
|
|
}
|
|
/**
|
|
You can abort the `request` using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
|
|
|
|
*Requires Node.js 16 or later.*
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
const abortController = new AbortController();
|
|
|
|
const request = got('https://httpbin.org/anything', {
|
|
signal: abortController.signal
|
|
});
|
|
|
|
setTimeout(() => {
|
|
abortController.abort();
|
|
}, 100);
|
|
```
|
|
*/
|
|
// TODO: Replace `any` with `AbortSignal` when targeting Node 16.
|
|
get signal() {
|
|
return this._internals.signal;
|
|
}
|
|
// TODO: Replace `any` with `AbortSignal` when targeting Node 16.
|
|
set signal(value) {
|
|
assert.object(value);
|
|
this._internals.signal = value;
|
|
}
|
|
/**
|
|
Ignore invalid cookies instead of throwing an error.
|
|
Only useful when the `cookieJar` option has been set. Not recommended.
|
|
|
|
@default false
|
|
*/
|
|
get ignoreInvalidCookies() {
|
|
return this._internals.ignoreInvalidCookies;
|
|
}
|
|
set ignoreInvalidCookies(value) {
|
|
assert.boolean(value);
|
|
this._internals.ignoreInvalidCookies = value;
|
|
}
|
|
/**
|
|
Query string that will be added to the request URL.
|
|
This will override the query string in `url`.
|
|
|
|
If you need to pass in an array, you can do it using a `URLSearchParams` instance.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]);
|
|
|
|
await got('https://example.com', {searchParams});
|
|
|
|
console.log(searchParams.toString());
|
|
//=> 'key=a&key=b'
|
|
```
|
|
*/
|
|
get searchParams() {
|
|
if (this._internals.url) {
|
|
return this._internals.url.searchParams;
|
|
}
|
|
if (this._internals.searchParams === undefined) {
|
|
this._internals.searchParams = new external_node_url_namespaceObject.URLSearchParams();
|
|
}
|
|
return this._internals.searchParams;
|
|
}
|
|
set searchParams(value) {
|
|
assert.any([dist.string, dist.object, dist.undefined], value);
|
|
const url = this._internals.url;
|
|
if (value === undefined) {
|
|
this._internals.searchParams = undefined;
|
|
if (url) {
|
|
url.search = '';
|
|
}
|
|
return;
|
|
}
|
|
const searchParameters = this.searchParams;
|
|
let updated;
|
|
if (dist.string(value)) {
|
|
updated = new external_node_url_namespaceObject.URLSearchParams(value);
|
|
}
|
|
else if (value instanceof external_node_url_namespaceObject.URLSearchParams) {
|
|
updated = value;
|
|
}
|
|
else {
|
|
validateSearchParameters(value);
|
|
updated = new external_node_url_namespaceObject.URLSearchParams();
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in value) {
|
|
const entry = value[key];
|
|
if (entry === null) {
|
|
updated.append(key, '');
|
|
}
|
|
else if (entry === undefined) {
|
|
searchParameters.delete(key);
|
|
}
|
|
else {
|
|
updated.append(key, entry);
|
|
}
|
|
}
|
|
}
|
|
if (this._merging) {
|
|
// These keys will be replaced
|
|
for (const key of updated.keys()) {
|
|
searchParameters.delete(key);
|
|
}
|
|
for (const [key, value] of updated) {
|
|
searchParameters.append(key, value);
|
|
}
|
|
}
|
|
else if (url) {
|
|
url.search = searchParameters.toString();
|
|
}
|
|
else {
|
|
this._internals.searchParams = searchParameters;
|
|
}
|
|
}
|
|
get searchParameters() {
|
|
throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');
|
|
}
|
|
set searchParameters(_value) {
|
|
throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');
|
|
}
|
|
get dnsLookup() {
|
|
return this._internals.dnsLookup;
|
|
}
|
|
set dnsLookup(value) {
|
|
assert.any([dist.function_, dist.undefined], value);
|
|
this._internals.dnsLookup = value;
|
|
}
|
|
/**
|
|
An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups.
|
|
Useful when making lots of requests to different *public* hostnames.
|
|
|
|
`CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay.
|
|
|
|
__Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc.
|
|
|
|
@default false
|
|
*/
|
|
get dnsCache() {
|
|
return this._internals.dnsCache;
|
|
}
|
|
set dnsCache(value) {
|
|
assert.any([dist.object, dist.boolean, dist.undefined], value);
|
|
if (value === true) {
|
|
this._internals.dnsCache = getGlobalDnsCache();
|
|
}
|
|
else if (value === false) {
|
|
this._internals.dnsCache = undefined;
|
|
}
|
|
else {
|
|
this._internals.dnsCache = value;
|
|
}
|
|
}
|
|
/**
|
|
User data. `context` is shallow merged and enumerable. If it contains non-enumerable properties they will NOT be merged.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
const instance = got.extend({
|
|
hooks: {
|
|
beforeRequest: [
|
|
options => {
|
|
if (!options.context || !options.context.token) {
|
|
throw new Error('Token required');
|
|
}
|
|
|
|
options.headers.token = options.context.token;
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
const context = {
|
|
token: 'secret'
|
|
};
|
|
|
|
const response = await instance('https://httpbin.org/headers', {context});
|
|
|
|
// Let's see the headers
|
|
console.log(response.body);
|
|
```
|
|
*/
|
|
get context() {
|
|
return this._internals.context;
|
|
}
|
|
set context(value) {
|
|
assert.object(value);
|
|
if (this._merging) {
|
|
Object.assign(this._internals.context, value);
|
|
}
|
|
else {
|
|
this._internals.context = { ...value };
|
|
}
|
|
}
|
|
/**
|
|
Hooks allow modifications during the request lifecycle.
|
|
Hook functions may be async and are run serially.
|
|
*/
|
|
get hooks() {
|
|
return this._internals.hooks;
|
|
}
|
|
set hooks(value) {
|
|
assert.object(value);
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const knownHookEvent in value) {
|
|
if (!(knownHookEvent in this._internals.hooks)) {
|
|
throw new Error(`Unexpected hook event: ${knownHookEvent}`);
|
|
}
|
|
const typedKnownHookEvent = knownHookEvent;
|
|
const typedValue = value;
|
|
const hooks = typedValue[typedKnownHookEvent];
|
|
assert.any([dist.array, dist.undefined], hooks);
|
|
if (hooks) {
|
|
for (const hook of hooks) {
|
|
assert.function_(hook);
|
|
}
|
|
}
|
|
if (this._merging) {
|
|
if (hooks) {
|
|
// @ts-expect-error FIXME
|
|
this._internals.hooks[typedKnownHookEvent].push(...hooks);
|
|
}
|
|
}
|
|
else {
|
|
if (!hooks) {
|
|
throw new Error(`Missing hook event: ${knownHookEvent}`);
|
|
}
|
|
// @ts-expect-error FIXME
|
|
this._internals.hooks[knownHookEvent] = [...hooks];
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
Defines if redirect responses should be followed automatically.
|
|
|
|
Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`.
|
|
This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4).
|
|
|
|
@default true
|
|
*/
|
|
get followRedirect() {
|
|
return this._internals.followRedirect;
|
|
}
|
|
set followRedirect(value) {
|
|
assert.boolean(value);
|
|
this._internals.followRedirect = value;
|
|
}
|
|
get followRedirects() {
|
|
throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
|
|
}
|
|
set followRedirects(_value) {
|
|
throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
|
|
}
|
|
/**
|
|
If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown.
|
|
|
|
@default 10
|
|
*/
|
|
get maxRedirects() {
|
|
return this._internals.maxRedirects;
|
|
}
|
|
set maxRedirects(value) {
|
|
assert.number(value);
|
|
this._internals.maxRedirects = value;
|
|
}
|
|
/**
|
|
A cache adapter instance for storing cached response data.
|
|
|
|
@default false
|
|
*/
|
|
get cache() {
|
|
return this._internals.cache;
|
|
}
|
|
set cache(value) {
|
|
assert.any([dist.object, dist.string, dist.boolean, dist.undefined], value);
|
|
if (value === true) {
|
|
this._internals.cache = globalCache;
|
|
}
|
|
else if (value === false) {
|
|
this._internals.cache = undefined;
|
|
}
|
|
else {
|
|
this._internals.cache = value;
|
|
}
|
|
}
|
|
/**
|
|
Determines if a `got.HTTPError` is thrown for unsuccessful responses.
|
|
|
|
If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing.
|
|
This may be useful if you are checking for resource availability and are expecting error responses.
|
|
|
|
@default true
|
|
*/
|
|
get throwHttpErrors() {
|
|
return this._internals.throwHttpErrors;
|
|
}
|
|
set throwHttpErrors(value) {
|
|
assert.boolean(value);
|
|
this._internals.throwHttpErrors = value;
|
|
}
|
|
get username() {
|
|
const url = this._internals.url;
|
|
const value = url ? url.username : this._internals.username;
|
|
return decodeURIComponent(value);
|
|
}
|
|
set username(value) {
|
|
assert.string(value);
|
|
const url = this._internals.url;
|
|
const fixedValue = encodeURIComponent(value);
|
|
if (url) {
|
|
url.username = fixedValue;
|
|
}
|
|
else {
|
|
this._internals.username = fixedValue;
|
|
}
|
|
}
|
|
get password() {
|
|
const url = this._internals.url;
|
|
const value = url ? url.password : this._internals.password;
|
|
return decodeURIComponent(value);
|
|
}
|
|
set password(value) {
|
|
assert.string(value);
|
|
const url = this._internals.url;
|
|
const fixedValue = encodeURIComponent(value);
|
|
if (url) {
|
|
url.password = fixedValue;
|
|
}
|
|
else {
|
|
this._internals.password = fixedValue;
|
|
}
|
|
}
|
|
/**
|
|
If set to `true`, Got will additionally accept HTTP2 requests.
|
|
|
|
It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol.
|
|
|
|
__Note__: This option requires Node.js 15.10.0 or newer as HTTP/2 support on older Node.js versions is very buggy.
|
|
|
|
__Note__: Overriding `options.request` will disable HTTP2 support.
|
|
|
|
@default false
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true});
|
|
|
|
console.log(headers.via);
|
|
//=> '2 nghttpx'
|
|
```
|
|
*/
|
|
get http2() {
|
|
return this._internals.http2;
|
|
}
|
|
set http2(value) {
|
|
assert.boolean(value);
|
|
this._internals.http2 = value;
|
|
}
|
|
/**
|
|
Set this to `true` to allow sending body for the `GET` method.
|
|
However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect.
|
|
This option is only meant to interact with non-compliant servers when you have no other choice.
|
|
|
|
__Note__: The [RFC 7321](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__.
|
|
|
|
@default false
|
|
*/
|
|
get allowGetBody() {
|
|
return this._internals.allowGetBody;
|
|
}
|
|
set allowGetBody(value) {
|
|
assert.boolean(value);
|
|
this._internals.allowGetBody = value;
|
|
}
|
|
/**
|
|
Request headers.
|
|
|
|
Existing headers will be overwritten. Headers set to `undefined` will be omitted.
|
|
|
|
@default {}
|
|
*/
|
|
get headers() {
|
|
return this._internals.headers;
|
|
}
|
|
set headers(value) {
|
|
assert.plainObject(value);
|
|
if (this._merging) {
|
|
Object.assign(this._internals.headers, lowercaseKeys(value));
|
|
}
|
|
else {
|
|
this._internals.headers = lowercaseKeys(value);
|
|
}
|
|
}
|
|
/**
|
|
Specifies if the redirects should be [rewritten as `GET`](https://tools.ietf.org/html/rfc7231#section-6.4).
|
|
|
|
If `false`, when sending a POST request and receiving a `302`, it will resend the body to the new location using the same HTTP method (`POST` in this case).
|
|
|
|
@default false
|
|
*/
|
|
get methodRewriting() {
|
|
return this._internals.methodRewriting;
|
|
}
|
|
set methodRewriting(value) {
|
|
assert.boolean(value);
|
|
this._internals.methodRewriting = value;
|
|
}
|
|
/**
|
|
Indicates which DNS record family to use.
|
|
|
|
Values:
|
|
- `undefined`: IPv4 (if present) or IPv6
|
|
- `4`: Only IPv4
|
|
- `6`: Only IPv6
|
|
|
|
@default undefined
|
|
*/
|
|
get dnsLookupIpVersion() {
|
|
return this._internals.dnsLookupIpVersion;
|
|
}
|
|
set dnsLookupIpVersion(value) {
|
|
if (value !== undefined && value !== 4 && value !== 6) {
|
|
throw new TypeError(`Invalid DNS lookup IP version: ${value}`);
|
|
}
|
|
this._internals.dnsLookupIpVersion = value;
|
|
}
|
|
/**
|
|
A function used to parse JSON responses.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
import Bourne from '@hapi/bourne';
|
|
|
|
const parsed = await got('https://example.com', {
|
|
parseJson: text => Bourne.parse(text)
|
|
}).json();
|
|
|
|
console.log(parsed);
|
|
```
|
|
*/
|
|
get parseJson() {
|
|
return this._internals.parseJson;
|
|
}
|
|
set parseJson(value) {
|
|
assert.function_(value);
|
|
this._internals.parseJson = value;
|
|
}
|
|
/**
|
|
A function used to stringify the body of JSON requests.
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
await got.post('https://example.com', {
|
|
stringifyJson: object => JSON.stringify(object, (key, value) => {
|
|
if (key.startsWith('_')) {
|
|
return;
|
|
}
|
|
|
|
return value;
|
|
}),
|
|
json: {
|
|
some: 'payload',
|
|
_ignoreMe: 1234
|
|
}
|
|
});
|
|
```
|
|
|
|
@example
|
|
```
|
|
import got from 'got';
|
|
|
|
await got.post('https://example.com', {
|
|
stringifyJson: object => JSON.stringify(object, (key, value) => {
|
|
if (typeof value === 'number') {
|
|
return value.toString();
|
|
}
|
|
|
|
return value;
|
|
}),
|
|
json: {
|
|
some: 'payload',
|
|
number: 1
|
|
}
|
|
});
|
|
```
|
|
*/
|
|
get stringifyJson() {
|
|
return this._internals.stringifyJson;
|
|
}
|
|
set stringifyJson(value) {
|
|
assert.function_(value);
|
|
this._internals.stringifyJson = value;
|
|
}
|
|
/**
|
|
An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes.
|
|
|
|
Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1).
|
|
|
|
The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value.
|
|
The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry).
|
|
|
|
By default, it retries *only* on the specified methods, status codes, and on these network errors:
|
|
|
|
- `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached.
|
|
- `ECONNRESET`: Connection was forcibly closed by a peer.
|
|
- `EADDRINUSE`: Could not bind to any free port.
|
|
- `ECONNREFUSED`: Connection was refused by the server.
|
|
- `EPIPE`: The remote side of the stream being written has been closed.
|
|
- `ENOTFOUND`: Couldn't resolve the hostname to an IP address.
|
|
- `ENETUNREACH`: No internet connection.
|
|
- `EAI_AGAIN`: DNS lookup timed out.
|
|
|
|
__Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`.
|
|
__Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request.
|
|
*/
|
|
get retry() {
|
|
return this._internals.retry;
|
|
}
|
|
set retry(value) {
|
|
assert.plainObject(value);
|
|
assert.any([dist.function_, dist.undefined], value.calculateDelay);
|
|
assert.any([dist.number, dist.undefined], value.maxRetryAfter);
|
|
assert.any([dist.number, dist.undefined], value.limit);
|
|
assert.any([dist.array, dist.undefined], value.methods);
|
|
assert.any([dist.array, dist.undefined], value.statusCodes);
|
|
assert.any([dist.array, dist.undefined], value.errorCodes);
|
|
assert.any([dist.number, dist.undefined], value.noise);
|
|
if (value.noise && Math.abs(value.noise) > 100) {
|
|
throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`);
|
|
}
|
|
for (const key in value) {
|
|
if (!(key in this._internals.retry)) {
|
|
throw new Error(`Unexpected retry option: ${key}`);
|
|
}
|
|
}
|
|
if (this._merging) {
|
|
Object.assign(this._internals.retry, value);
|
|
}
|
|
else {
|
|
this._internals.retry = { ...value };
|
|
}
|
|
const { retry } = this._internals;
|
|
retry.methods = [...new Set(retry.methods.map(method => method.toUpperCase()))];
|
|
retry.statusCodes = [...new Set(retry.statusCodes)];
|
|
retry.errorCodes = [...new Set(retry.errorCodes)];
|
|
}
|
|
/**
|
|
From `http.RequestOptions`.
|
|
|
|
The IP address used to send the request from.
|
|
*/
|
|
get localAddress() {
|
|
return this._internals.localAddress;
|
|
}
|
|
set localAddress(value) {
|
|
assert.any([dist.string, dist.undefined], value);
|
|
this._internals.localAddress = value;
|
|
}
|
|
/**
|
|
The HTTP method used to make the request.
|
|
|
|
@default 'GET'
|
|
*/
|
|
get method() {
|
|
return this._internals.method;
|
|
}
|
|
set method(value) {
|
|
assert.string(value);
|
|
this._internals.method = value.toUpperCase();
|
|
}
|
|
get createConnection() {
|
|
return this._internals.createConnection;
|
|
}
|
|
set createConnection(value) {
|
|
assert.any([dist.function_, dist.undefined], value);
|
|
this._internals.createConnection = value;
|
|
}
|
|
/**
|
|
From `http-cache-semantics`
|
|
|
|
@default {}
|
|
*/
|
|
get cacheOptions() {
|
|
return this._internals.cacheOptions;
|
|
}
|
|
set cacheOptions(value) {
|
|
assert.plainObject(value);
|
|
assert.any([dist.boolean, dist.undefined], value.shared);
|
|
assert.any([dist.number, dist.undefined], value.cacheHeuristic);
|
|
assert.any([dist.number, dist.undefined], value.immutableMinTimeToLive);
|
|
assert.any([dist.boolean, dist.undefined], value.ignoreCargoCult);
|
|
for (const key in value) {
|
|
if (!(key in this._internals.cacheOptions)) {
|
|
throw new Error(`Cache option \`${key}\` does not exist`);
|
|
}
|
|
}
|
|
if (this._merging) {
|
|
Object.assign(this._internals.cacheOptions, value);
|
|
}
|
|
else {
|
|
this._internals.cacheOptions = { ...value };
|
|
}
|
|
}
|
|
/**
|
|
Options for the advanced HTTPS API.
|
|
*/
|
|
get https() {
|
|
return this._internals.https;
|
|
}
|
|
set https(value) {
|
|
assert.plainObject(value);
|
|
assert.any([dist.boolean, dist.undefined], value.rejectUnauthorized);
|
|
assert.any([dist.function_, dist.undefined], value.checkServerIdentity);
|
|
assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificateAuthority);
|
|
assert.any([dist.string, dist.object, dist.array, dist.undefined], value.key);
|
|
assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificate);
|
|
assert.any([dist.string, dist.undefined], value.passphrase);
|
|
assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.pfx);
|
|
assert.any([dist.array, dist.undefined], value.alpnProtocols);
|
|
assert.any([dist.string, dist.undefined], value.ciphers);
|
|
assert.any([dist.string, dist.buffer, dist.undefined], value.dhparam);
|
|
assert.any([dist.string, dist.undefined], value.signatureAlgorithms);
|
|
assert.any([dist.string, dist.undefined], value.minVersion);
|
|
assert.any([dist.string, dist.undefined], value.maxVersion);
|
|
assert.any([dist.boolean, dist.undefined], value.honorCipherOrder);
|
|
assert.any([dist.number, dist.undefined], value.tlsSessionLifetime);
|
|
assert.any([dist.string, dist.undefined], value.ecdhCurve);
|
|
assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.certificateRevocationLists);
|
|
for (const key in value) {
|
|
if (!(key in this._internals.https)) {
|
|
throw new Error(`HTTPS option \`${key}\` does not exist`);
|
|
}
|
|
}
|
|
if (this._merging) {
|
|
Object.assign(this._internals.https, value);
|
|
}
|
|
else {
|
|
this._internals.https = { ...value };
|
|
}
|
|
}
|
|
/**
|
|
[Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data.
|
|
|
|
To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead.
|
|
Don't set this option to `null`.
|
|
|
|
__Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`.
|
|
|
|
@default 'utf-8'
|
|
*/
|
|
get encoding() {
|
|
return this._internals.encoding;
|
|
}
|
|
set encoding(value) {
|
|
if (value === null) {
|
|
throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
|
|
}
|
|
assert.any([dist.string, dist.undefined], value);
|
|
this._internals.encoding = value;
|
|
}
|
|
/**
|
|
When set to `true` the promise will return the Response body instead of the Response object.
|
|
|
|
@default false
|
|
*/
|
|
get resolveBodyOnly() {
|
|
return this._internals.resolveBodyOnly;
|
|
}
|
|
set resolveBodyOnly(value) {
|
|
assert.boolean(value);
|
|
this._internals.resolveBodyOnly = value;
|
|
}
|
|
/**
|
|
Returns a `Stream` instead of a `Promise`.
|
|
This is equivalent to calling `got.stream(url, options?)`.
|
|
|
|
@default false
|
|
*/
|
|
get isStream() {
|
|
return this._internals.isStream;
|
|
}
|
|
set isStream(value) {
|
|
assert.boolean(value);
|
|
this._internals.isStream = value;
|
|
}
|
|
/**
|
|
The parsing method.
|
|
|
|
The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body.
|
|
|
|
It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise.
|
|
|
|
__Note__: When using streams, this option is ignored.
|
|
|
|
@example
|
|
```
|
|
const responsePromise = got(url);
|
|
const bufferPromise = responsePromise.buffer();
|
|
const jsonPromise = responsePromise.json();
|
|
|
|
const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]);
|
|
// `response` is an instance of Got Response
|
|
// `buffer` is an instance of Buffer
|
|
// `json` is an object
|
|
```
|
|
|
|
@example
|
|
```
|
|
// This
|
|
const body = await got(url).json();
|
|
|
|
// is semantically the same as this
|
|
const body = await got(url, {responseType: 'json', resolveBodyOnly: true});
|
|
```
|
|
*/
|
|
get responseType() {
|
|
return this._internals.responseType;
|
|
}
|
|
set responseType(value) {
|
|
if (value === undefined) {
|
|
this._internals.responseType = 'text';
|
|
return;
|
|
}
|
|
if (value !== 'text' && value !== 'buffer' && value !== 'json') {
|
|
throw new Error(`Invalid \`responseType\` option: ${value}`);
|
|
}
|
|
this._internals.responseType = value;
|
|
}
|
|
get pagination() {
|
|
return this._internals.pagination;
|
|
}
|
|
set pagination(value) {
|
|
assert.object(value);
|
|
if (this._merging) {
|
|
Object.assign(this._internals.pagination, value);
|
|
}
|
|
else {
|
|
this._internals.pagination = value;
|
|
}
|
|
}
|
|
get auth() {
|
|
throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');
|
|
}
|
|
set auth(_value) {
|
|
throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');
|
|
}
|
|
get setHost() {
|
|
return this._internals.setHost;
|
|
}
|
|
set setHost(value) {
|
|
assert.boolean(value);
|
|
this._internals.setHost = value;
|
|
}
|
|
get maxHeaderSize() {
|
|
return this._internals.maxHeaderSize;
|
|
}
|
|
set maxHeaderSize(value) {
|
|
assert.any([dist.number, dist.undefined], value);
|
|
this._internals.maxHeaderSize = value;
|
|
}
|
|
get enableUnixSockets() {
|
|
return this._internals.enableUnixSockets;
|
|
}
|
|
set enableUnixSockets(value) {
|
|
assert.boolean(value);
|
|
this._internals.enableUnixSockets = value;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
toJSON() {
|
|
return { ...this._internals };
|
|
}
|
|
[Symbol.for('nodejs.util.inspect.custom')](_depth, options) {
|
|
return (0,external_node_util_namespaceObject.inspect)(this._internals, options);
|
|
}
|
|
createNativeRequestOptions() {
|
|
const internals = this._internals;
|
|
const url = internals.url;
|
|
let agent;
|
|
if (url.protocol === 'https:') {
|
|
agent = internals.http2 ? internals.agent : internals.agent.https;
|
|
}
|
|
else {
|
|
agent = internals.agent.http;
|
|
}
|
|
const { https } = internals;
|
|
let { pfx } = https;
|
|
if (dist.array(pfx) && dist.plainObject(pfx[0])) {
|
|
pfx = pfx.map(object => ({
|
|
buf: object.buffer,
|
|
passphrase: object.passphrase,
|
|
}));
|
|
}
|
|
return {
|
|
...internals.cacheOptions,
|
|
...this._unixOptions,
|
|
// HTTPS options
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
ALPNProtocols: https.alpnProtocols,
|
|
ca: https.certificateAuthority,
|
|
cert: https.certificate,
|
|
key: https.key,
|
|
passphrase: https.passphrase,
|
|
pfx: https.pfx,
|
|
rejectUnauthorized: https.rejectUnauthorized,
|
|
checkServerIdentity: https.checkServerIdentity ?? external_node_tls_namespaceObject.checkServerIdentity,
|
|
ciphers: https.ciphers,
|
|
honorCipherOrder: https.honorCipherOrder,
|
|
minVersion: https.minVersion,
|
|
maxVersion: https.maxVersion,
|
|
sigalgs: https.signatureAlgorithms,
|
|
sessionTimeout: https.tlsSessionLifetime,
|
|
dhparam: https.dhparam,
|
|
ecdhCurve: https.ecdhCurve,
|
|
crl: https.certificateRevocationLists,
|
|
// HTTP options
|
|
lookup: internals.dnsLookup ?? internals.dnsCache?.lookup,
|
|
family: internals.dnsLookupIpVersion,
|
|
agent,
|
|
setHost: internals.setHost,
|
|
method: internals.method,
|
|
maxHeaderSize: internals.maxHeaderSize,
|
|
localAddress: internals.localAddress,
|
|
headers: internals.headers,
|
|
createConnection: internals.createConnection,
|
|
timeout: internals.http2 ? getHttp2TimeoutOption(internals) : undefined,
|
|
// HTTP/2 options
|
|
h2session: internals.h2session,
|
|
};
|
|
}
|
|
getRequestFunction() {
|
|
const url = this._internals.url;
|
|
const { request } = this._internals;
|
|
if (!request && url) {
|
|
return this.getFallbackRequestFunction();
|
|
}
|
|
return request;
|
|
}
|
|
getFallbackRequestFunction() {
|
|
const url = this._internals.url;
|
|
if (!url) {
|
|
return;
|
|
}
|
|
if (url.protocol === 'https:') {
|
|
if (this._internals.http2) {
|
|
if (major < 15 || (major === 15 && minor < 10)) {
|
|
const error = new Error('To use the `http2` option, install Node.js 15.10.0 or above');
|
|
error.code = 'EUNSUPPORTED';
|
|
throw error;
|
|
}
|
|
return http2_wrapper_source.auto;
|
|
}
|
|
return external_node_https_namespaceObject.request;
|
|
}
|
|
return external_node_http_namespaceObject.request;
|
|
}
|
|
freeze() {
|
|
const options = this._internals;
|
|
Object.freeze(options);
|
|
Object.freeze(options.hooks);
|
|
Object.freeze(options.hooks.afterResponse);
|
|
Object.freeze(options.hooks.beforeError);
|
|
Object.freeze(options.hooks.beforeRedirect);
|
|
Object.freeze(options.hooks.beforeRequest);
|
|
Object.freeze(options.hooks.beforeRetry);
|
|
Object.freeze(options.hooks.init);
|
|
Object.freeze(options.https);
|
|
Object.freeze(options.cacheOptions);
|
|
Object.freeze(options.agent);
|
|
Object.freeze(options.headers);
|
|
Object.freeze(options.timeout);
|
|
Object.freeze(options.retry);
|
|
Object.freeze(options.retry.errorCodes);
|
|
Object.freeze(options.retry.methods);
|
|
Object.freeze(options.retry.statusCodes);
|
|
Object.freeze(options.context);
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/response.js
|
|
|
|
const isResponseOk = (response) => {
|
|
const { statusCode } = response;
|
|
const limitStatusCode = response.request.options.followRedirect ? 299 : 399;
|
|
return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
|
|
};
|
|
/**
|
|
An error to be thrown when server response code is 2xx, and parsing body fails.
|
|
Includes a `response` property.
|
|
*/
|
|
class ParseError extends RequestError {
|
|
constructor(error, response) {
|
|
const { options } = response.request;
|
|
super(`${error.message} in "${options.url.toString()}"`, error, response.request);
|
|
this.name = 'ParseError';
|
|
this.code = 'ERR_BODY_PARSE_FAILURE';
|
|
}
|
|
}
|
|
const parseBody = (response, responseType, parseJson, encoding) => {
|
|
const { rawBody } = response;
|
|
try {
|
|
if (responseType === 'text') {
|
|
return rawBody.toString(encoding);
|
|
}
|
|
if (responseType === 'json') {
|
|
return rawBody.length === 0 ? '' : parseJson(rawBody.toString(encoding));
|
|
}
|
|
if (responseType === 'buffer') {
|
|
return rawBody;
|
|
}
|
|
}
|
|
catch (error) {
|
|
throw new ParseError(error, response);
|
|
}
|
|
throw new ParseError({
|
|
message: `Unknown body type '${responseType}'`,
|
|
name: 'Error',
|
|
}, response);
|
|
};
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-client-request.js
|
|
function isClientRequest(clientRequest) {
|
|
return clientRequest.writable && !clientRequest.writableEnded;
|
|
}
|
|
/* harmony default export */ const is_client_request = (isClientRequest);
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-unix-socket-url.js
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
function isUnixSocketURL(url) {
|
|
return url.protocol === 'unix:' || url.hostname === 'unix';
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/index.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const supportsBrotli = dist.string(external_node_process_namespaceObject.versions.brotli);
|
|
const methodsWithoutBody = new Set(['GET', 'HEAD']);
|
|
const cacheableStore = new WeakableMap();
|
|
const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);
|
|
const proxiedRequestEvents = [
|
|
'socket',
|
|
'connect',
|
|
'continue',
|
|
'information',
|
|
'upgrade',
|
|
];
|
|
const core_noop = () => { };
|
|
class Request extends external_node_stream_namespaceObject.Duplex {
|
|
constructor(url, options, defaults) {
|
|
super({
|
|
// Don't destroy immediately, as the error may be emitted on unsuccessful retry
|
|
autoDestroy: false,
|
|
// It needs to be zero because we're just proxying the data to another stream
|
|
highWaterMark: 0,
|
|
});
|
|
// @ts-expect-error - Ignoring for now.
|
|
Object.defineProperty(this, 'constructor', {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_noPipe", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
// @ts-expect-error https://github.com/microsoft/TypeScript/issues/9568
|
|
Object.defineProperty(this, "options", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "response", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "requestUrl", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "redirectUrls", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "retryCount", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_stopRetry", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_downloadedSize", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_uploadedSize", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_stopReading", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_pipedServerResponses", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_request", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_responseSize", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_bodySize", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_unproxyEvents", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_isFromCache", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_cannotHaveBody", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_triggerRead", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_cancelTimeouts", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_nativeResponse", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_flushed", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
Object.defineProperty(this, "_aborted", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
// We need this because `this._request` if `undefined` when using cache
|
|
Object.defineProperty(this, "_requestInitialized", {
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true,
|
|
value: void 0
|
|
});
|
|
this._downloadedSize = 0;
|
|
this._uploadedSize = 0;
|
|
this._stopReading = false;
|
|
this._pipedServerResponses = new Set();
|
|
this._cannotHaveBody = false;
|
|
this._unproxyEvents = core_noop;
|
|
this._triggerRead = false;
|
|
this._cancelTimeouts = core_noop;
|
|
this._jobs = [];
|
|
this._flushed = false;
|
|
this._requestInitialized = false;
|
|
this._aborted = false;
|
|
this.redirectUrls = [];
|
|
this.retryCount = 0;
|
|
this._stopRetry = core_noop;
|
|
this.on('pipe', source => {
|
|
if (source.headers) {
|
|
Object.assign(this.options.headers, source.headers);
|
|
}
|
|
});
|
|
this.on('newListener', event => {
|
|
if (event === 'retry' && this.listenerCount('retry') > 0) {
|
|
throw new Error('A retry listener has been attached already.');
|
|
}
|
|
});
|
|
try {
|
|
this.options = new Options(url, options, defaults);
|
|
if (!this.options.url) {
|
|
if (this.options.prefixUrl === '') {
|
|
throw new TypeError('Missing `url` property');
|
|
}
|
|
this.options.url = '';
|
|
}
|
|
this.requestUrl = this.options.url;
|
|
}
|
|
catch (error) {
|
|
const { options } = error;
|
|
if (options) {
|
|
this.options = options;
|
|
}
|
|
this.flush = async () => {
|
|
this.flush = async () => { };
|
|
this.destroy(error);
|
|
};
|
|
return;
|
|
}
|
|
if (this.options.signal?.aborted) {
|
|
this.destroy(new AbortError(this));
|
|
}
|
|
this.options.signal?.addEventListener('abort', () => {
|
|
this.destroy(new AbortError(this));
|
|
});
|
|
// Important! If you replace `body` in a handler with another stream, make sure it's readable first.
|
|
// The below is run only once.
|
|
const { body } = this.options;
|
|
if (dist.nodeStream(body)) {
|
|
body.once('error', error => {
|
|
if (this._flushed) {
|
|
this._beforeError(new UploadError(error, this));
|
|
}
|
|
else {
|
|
this.flush = async () => {
|
|
this.flush = async () => { };
|
|
this._beforeError(new UploadError(error, this));
|
|
};
|
|
}
|
|
});
|
|
}
|
|
}
|
|
async flush() {
|
|
if (this._flushed) {
|
|
return;
|
|
}
|
|
this._flushed = true;
|
|
try {
|
|
await this._finalizeBody();
|
|
if (this.destroyed) {
|
|
return;
|
|
}
|
|
await this._makeRequest();
|
|
if (this.destroyed) {
|
|
this._request?.destroy();
|
|
return;
|
|
}
|
|
// Queued writes etc.
|
|
for (const job of this._jobs) {
|
|
job();
|
|
}
|
|
// Prevent memory leak
|
|
this._jobs.length = 0;
|
|
this._requestInitialized = true;
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
}
|
|
}
|
|
_beforeError(error) {
|
|
if (this._stopReading) {
|
|
return;
|
|
}
|
|
const { response, options } = this;
|
|
const attemptCount = this.retryCount + (error.name === 'RetryError' ? 0 : 1);
|
|
this._stopReading = true;
|
|
if (!(error instanceof RequestError)) {
|
|
error = new RequestError(error.message, error, this);
|
|
}
|
|
const typedError = error;
|
|
void (async () => {
|
|
// Node.js parser is really weird.
|
|
// It emits post-request Parse Errors on the same instance as previous request. WTF.
|
|
// Therefore we need to check if it has been destroyed as well.
|
|
//
|
|
// Furthermore, Node.js 16 `response.destroy()` doesn't immediately destroy the socket,
|
|
// but makes the response unreadable. So we additionally need to check `response.readable`.
|
|
if (response?.readable && !response.rawBody && !this._request?.socket?.destroyed) {
|
|
// @types/node has incorrect typings. `setEncoding` accepts `null` as well.
|
|
response.setEncoding(this.readableEncoding);
|
|
const success = await this._setRawBody(response);
|
|
if (success) {
|
|
response.body = response.rawBody.toString();
|
|
}
|
|
}
|
|
if (this.listenerCount('retry') !== 0) {
|
|
let backoff;
|
|
try {
|
|
let retryAfter;
|
|
if (response && 'retry-after' in response.headers) {
|
|
retryAfter = Number(response.headers['retry-after']);
|
|
if (Number.isNaN(retryAfter)) {
|
|
retryAfter = Date.parse(response.headers['retry-after']) - Date.now();
|
|
if (retryAfter <= 0) {
|
|
retryAfter = 1;
|
|
}
|
|
}
|
|
else {
|
|
retryAfter *= 1000;
|
|
}
|
|
}
|
|
const retryOptions = options.retry;
|
|
backoff = await retryOptions.calculateDelay({
|
|
attemptCount,
|
|
retryOptions,
|
|
error: typedError,
|
|
retryAfter,
|
|
computedValue: calculate_retry_delay({
|
|
attemptCount,
|
|
retryOptions,
|
|
error: typedError,
|
|
retryAfter,
|
|
computedValue: retryOptions.maxRetryAfter ?? options.timeout.request ?? Number.POSITIVE_INFINITY,
|
|
}),
|
|
});
|
|
}
|
|
catch (error_) {
|
|
void this._error(new RequestError(error_.message, error_, this));
|
|
return;
|
|
}
|
|
if (backoff) {
|
|
await new Promise(resolve => {
|
|
const timeout = setTimeout(resolve, backoff);
|
|
this._stopRetry = () => {
|
|
clearTimeout(timeout);
|
|
resolve();
|
|
};
|
|
});
|
|
// Something forced us to abort the retry
|
|
if (this.destroyed) {
|
|
return;
|
|
}
|
|
try {
|
|
for (const hook of this.options.hooks.beforeRetry) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await hook(typedError, this.retryCount + 1);
|
|
}
|
|
}
|
|
catch (error_) {
|
|
void this._error(new RequestError(error_.message, error, this));
|
|
return;
|
|
}
|
|
// Something forced us to abort the retry
|
|
if (this.destroyed) {
|
|
return;
|
|
}
|
|
this.destroy();
|
|
this.emit('retry', this.retryCount + 1, error, (updatedOptions) => {
|
|
const request = new Request(options.url, updatedOptions, options);
|
|
request.retryCount = this.retryCount + 1;
|
|
external_node_process_namespaceObject.nextTick(() => {
|
|
void request.flush();
|
|
});
|
|
return request;
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
void this._error(typedError);
|
|
})();
|
|
}
|
|
_read() {
|
|
this._triggerRead = true;
|
|
const { response } = this;
|
|
if (response && !this._stopReading) {
|
|
// We cannot put this in the `if` above
|
|
// because `.read()` also triggers the `end` event
|
|
if (response.readableLength) {
|
|
this._triggerRead = false;
|
|
}
|
|
let data;
|
|
while ((data = response.read()) !== null) {
|
|
this._downloadedSize += data.length; // eslint-disable-line @typescript-eslint/restrict-plus-operands
|
|
const progress = this.downloadProgress;
|
|
if (progress.percent < 1) {
|
|
this.emit('downloadProgress', progress);
|
|
}
|
|
this.push(data);
|
|
}
|
|
}
|
|
}
|
|
_write(chunk, encoding, callback) {
|
|
const write = () => {
|
|
this._writeRequest(chunk, encoding, callback);
|
|
};
|
|
if (this._requestInitialized) {
|
|
write();
|
|
}
|
|
else {
|
|
this._jobs.push(write);
|
|
}
|
|
}
|
|
_final(callback) {
|
|
const endRequest = () => {
|
|
// We need to check if `this._request` is present,
|
|
// because it isn't when we use cache.
|
|
if (!this._request || this._request.destroyed) {
|
|
callback();
|
|
return;
|
|
}
|
|
this._request.end((error) => {
|
|
// The request has been destroyed before `_final` finished.
|
|
// See https://github.com/nodejs/node/issues/39356
|
|
if (this._request._writableState?.errored) {
|
|
return;
|
|
}
|
|
if (!error) {
|
|
this._bodySize = this._uploadedSize;
|
|
this.emit('uploadProgress', this.uploadProgress);
|
|
this._request.emit('upload-complete');
|
|
}
|
|
callback(error);
|
|
});
|
|
};
|
|
if (this._requestInitialized) {
|
|
endRequest();
|
|
}
|
|
else {
|
|
this._jobs.push(endRequest);
|
|
}
|
|
}
|
|
_destroy(error, callback) {
|
|
this._stopReading = true;
|
|
this.flush = async () => { };
|
|
// Prevent further retries
|
|
this._stopRetry();
|
|
this._cancelTimeouts();
|
|
if (this.options) {
|
|
const { body } = this.options;
|
|
if (dist.nodeStream(body)) {
|
|
body.destroy();
|
|
}
|
|
}
|
|
if (this._request) {
|
|
this._request.destroy();
|
|
}
|
|
if (error !== null && !dist.undefined(error) && !(error instanceof RequestError)) {
|
|
error = new RequestError(error.message, error, this);
|
|
}
|
|
callback(error);
|
|
}
|
|
pipe(destination, options) {
|
|
if (destination instanceof external_node_http_namespaceObject.ServerResponse) {
|
|
this._pipedServerResponses.add(destination);
|
|
}
|
|
return super.pipe(destination, options);
|
|
}
|
|
unpipe(destination) {
|
|
if (destination instanceof external_node_http_namespaceObject.ServerResponse) {
|
|
this._pipedServerResponses.delete(destination);
|
|
}
|
|
super.unpipe(destination);
|
|
return this;
|
|
}
|
|
async _finalizeBody() {
|
|
const { options } = this;
|
|
const { headers } = options;
|
|
const isForm = !dist.undefined(options.form);
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
const isJSON = !dist.undefined(options.json);
|
|
const isBody = !dist.undefined(options.body);
|
|
const cannotHaveBody = methodsWithoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);
|
|
this._cannotHaveBody = cannotHaveBody;
|
|
if (isForm || isJSON || isBody) {
|
|
if (cannotHaveBody) {
|
|
throw new TypeError(`The \`${options.method}\` method cannot be used with a body`);
|
|
}
|
|
// Serialize body
|
|
const noContentType = !dist.string(headers['content-type']);
|
|
if (isBody) {
|
|
// Body is spec-compliant FormData
|
|
if (isFormData(options.body)) {
|
|
const encoder = new FormDataEncoder(options.body);
|
|
if (noContentType) {
|
|
headers['content-type'] = encoder.headers['Content-Type'];
|
|
}
|
|
headers['content-length'] = encoder.headers['Content-Length'];
|
|
options.body = encoder.encode();
|
|
}
|
|
// Special case for https://github.com/form-data/form-data
|
|
if (is_form_data_isFormData(options.body) && noContentType) {
|
|
headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;
|
|
}
|
|
}
|
|
else if (isForm) {
|
|
if (noContentType) {
|
|
headers['content-type'] = 'application/x-www-form-urlencoded';
|
|
}
|
|
const { form } = options;
|
|
options.form = undefined;
|
|
options.body = (new external_node_url_namespaceObject.URLSearchParams(form)).toString();
|
|
}
|
|
else {
|
|
if (noContentType) {
|
|
headers['content-type'] = 'application/json';
|
|
}
|
|
const { json } = options;
|
|
options.json = undefined;
|
|
options.body = options.stringifyJson(json);
|
|
}
|
|
const uploadBodySize = await getBodySize(options.body, options.headers);
|
|
// See https://tools.ietf.org/html/rfc7230#section-3.3.2
|
|
// A user agent SHOULD send a Content-Length in a request message when
|
|
// no Transfer-Encoding is sent and the request method defines a meaning
|
|
// for an enclosed payload body. For example, a Content-Length header
|
|
// field is normally sent in a POST request even when the value is 0
|
|
// (indicating an empty payload body). A user agent SHOULD NOT send a
|
|
// Content-Length header field when the request message does not contain
|
|
// a payload body and the method semantics do not anticipate such a
|
|
// body.
|
|
if (dist.undefined(headers['content-length']) && dist.undefined(headers['transfer-encoding']) && !cannotHaveBody && !dist.undefined(uploadBodySize)) {
|
|
headers['content-length'] = String(uploadBodySize);
|
|
}
|
|
}
|
|
if (options.responseType === 'json' && !('accept' in options.headers)) {
|
|
options.headers.accept = 'application/json';
|
|
}
|
|
this._bodySize = Number(headers['content-length']) || undefined;
|
|
}
|
|
async _onResponseBase(response) {
|
|
// This will be called e.g. when using cache so we need to check if this request has been aborted.
|
|
if (this.isAborted) {
|
|
return;
|
|
}
|
|
const { options } = this;
|
|
const { url } = options;
|
|
this._nativeResponse = response;
|
|
if (options.decompress) {
|
|
response = decompress_response(response);
|
|
}
|
|
const statusCode = response.statusCode;
|
|
const typedResponse = response;
|
|
typedResponse.statusMessage = typedResponse.statusMessage ? typedResponse.statusMessage : external_node_http_namespaceObject.STATUS_CODES[statusCode];
|
|
typedResponse.url = options.url.toString();
|
|
typedResponse.requestUrl = this.requestUrl;
|
|
typedResponse.redirectUrls = this.redirectUrls;
|
|
typedResponse.request = this;
|
|
typedResponse.isFromCache = this._nativeResponse.fromCache ?? false;
|
|
typedResponse.ip = this.ip;
|
|
typedResponse.retryCount = this.retryCount;
|
|
typedResponse.ok = isResponseOk(typedResponse);
|
|
this._isFromCache = typedResponse.isFromCache;
|
|
this._responseSize = Number(response.headers['content-length']) || undefined;
|
|
this.response = typedResponse;
|
|
response.once('end', () => {
|
|
this._responseSize = this._downloadedSize;
|
|
this.emit('downloadProgress', this.downloadProgress);
|
|
});
|
|
response.once('error', (error) => {
|
|
this._aborted = true;
|
|
// Force clean-up, because some packages don't do this.
|
|
// TODO: Fix decompress-response
|
|
response.destroy();
|
|
this._beforeError(new ReadError(error, this));
|
|
});
|
|
response.once('aborted', () => {
|
|
this._aborted = true;
|
|
this._beforeError(new ReadError({
|
|
name: 'Error',
|
|
message: 'The server aborted pending request',
|
|
code: 'ECONNRESET',
|
|
}, this));
|
|
});
|
|
this.emit('downloadProgress', this.downloadProgress);
|
|
const rawCookies = response.headers['set-cookie'];
|
|
if (dist.object(options.cookieJar) && rawCookies) {
|
|
let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));
|
|
if (options.ignoreInvalidCookies) {
|
|
promises = promises.map(async (promise) => {
|
|
try {
|
|
await promise;
|
|
}
|
|
catch { }
|
|
});
|
|
}
|
|
try {
|
|
await Promise.all(promises);
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
return;
|
|
}
|
|
}
|
|
// The above is running a promise, therefore we need to check if this request has been aborted yet again.
|
|
if (this.isAborted) {
|
|
return;
|
|
}
|
|
if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {
|
|
// We're being redirected, we don't care about the response.
|
|
// It'd be best to abort the request, but we can't because
|
|
// we would have to sacrifice the TCP connection. We don't want that.
|
|
response.resume();
|
|
this._cancelTimeouts();
|
|
this._unproxyEvents();
|
|
if (this.redirectUrls.length >= options.maxRedirects) {
|
|
this._beforeError(new MaxRedirectsError(this));
|
|
return;
|
|
}
|
|
this._request = undefined;
|
|
const updatedOptions = new Options(undefined, undefined, this.options);
|
|
const shouldBeGet = statusCode === 303 && updatedOptions.method !== 'GET' && updatedOptions.method !== 'HEAD';
|
|
if (shouldBeGet || updatedOptions.methodRewriting) {
|
|
// Server responded with "see other", indicating that the resource exists at another location,
|
|
// and the client should request it from that location via GET or HEAD.
|
|
updatedOptions.method = 'GET';
|
|
updatedOptions.body = undefined;
|
|
updatedOptions.json = undefined;
|
|
updatedOptions.form = undefined;
|
|
delete updatedOptions.headers['content-length'];
|
|
}
|
|
try {
|
|
// We need this in order to support UTF-8
|
|
const redirectBuffer = external_node_buffer_namespaceObject.Buffer.from(response.headers.location, 'binary').toString();
|
|
const redirectUrl = new external_node_url_namespaceObject.URL(redirectBuffer, url);
|
|
if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {
|
|
this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this));
|
|
return;
|
|
}
|
|
// Redirecting to a different site, clear sensitive data.
|
|
if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {
|
|
if ('host' in updatedOptions.headers) {
|
|
delete updatedOptions.headers.host;
|
|
}
|
|
if ('cookie' in updatedOptions.headers) {
|
|
delete updatedOptions.headers.cookie;
|
|
}
|
|
if ('authorization' in updatedOptions.headers) {
|
|
delete updatedOptions.headers.authorization;
|
|
}
|
|
if (updatedOptions.username || updatedOptions.password) {
|
|
updatedOptions.username = '';
|
|
updatedOptions.password = '';
|
|
}
|
|
}
|
|
else {
|
|
redirectUrl.username = updatedOptions.username;
|
|
redirectUrl.password = updatedOptions.password;
|
|
}
|
|
this.redirectUrls.push(redirectUrl);
|
|
updatedOptions.prefixUrl = '';
|
|
updatedOptions.url = redirectUrl;
|
|
for (const hook of updatedOptions.hooks.beforeRedirect) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await hook(updatedOptions, typedResponse);
|
|
}
|
|
this.emit('redirect', updatedOptions, typedResponse);
|
|
this.options = updatedOptions;
|
|
await this._makeRequest();
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
if (options.isStream && options.throwHttpErrors && !isResponseOk(typedResponse)) {
|
|
this._beforeError(new HTTPError(typedResponse));
|
|
return;
|
|
}
|
|
response.on('readable', () => {
|
|
if (this._triggerRead) {
|
|
this._read();
|
|
}
|
|
});
|
|
this.on('resume', () => {
|
|
response.resume();
|
|
});
|
|
this.on('pause', () => {
|
|
response.pause();
|
|
});
|
|
response.once('end', () => {
|
|
this.push(null);
|
|
});
|
|
if (this._noPipe) {
|
|
const success = await this._setRawBody();
|
|
if (success) {
|
|
this.emit('response', response);
|
|
}
|
|
return;
|
|
}
|
|
this.emit('response', response);
|
|
for (const destination of this._pipedServerResponses) {
|
|
if (destination.headersSent) {
|
|
continue;
|
|
}
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in response.headers) {
|
|
const isAllowed = options.decompress ? key !== 'content-encoding' : true;
|
|
const value = response.headers[key];
|
|
if (isAllowed) {
|
|
destination.setHeader(key, value);
|
|
}
|
|
}
|
|
destination.statusCode = statusCode;
|
|
}
|
|
}
|
|
async _setRawBody(from = this) {
|
|
if (from.readableEnded) {
|
|
return false;
|
|
}
|
|
try {
|
|
// Errors are emitted via the `error` event
|
|
const rawBody = await (0,get_stream.buffer)(from);
|
|
// On retry Request is destroyed with no error, therefore the above will successfully resolve.
|
|
// So in order to check if this was really successfull, we need to check if it has been properly ended.
|
|
if (!this.isAborted) {
|
|
this.response.rawBody = rawBody;
|
|
return true;
|
|
}
|
|
}
|
|
catch { }
|
|
return false;
|
|
}
|
|
async _onResponse(response) {
|
|
try {
|
|
await this._onResponseBase(response);
|
|
}
|
|
catch (error) {
|
|
/* istanbul ignore next: better safe than sorry */
|
|
this._beforeError(error);
|
|
}
|
|
}
|
|
_onRequest(request) {
|
|
const { options } = this;
|
|
const { timeout, url } = options;
|
|
dist_source(request);
|
|
if (this.options.http2) {
|
|
// Unset stream timeout, as the `timeout` option was used only for connection timeout.
|
|
request.setTimeout(0);
|
|
}
|
|
this._cancelTimeouts = timedOut(request, timeout, url);
|
|
const responseEventName = options.cache ? 'cacheableResponse' : 'response';
|
|
request.once(responseEventName, (response) => {
|
|
void this._onResponse(response);
|
|
});
|
|
request.once('error', (error) => {
|
|
this._aborted = true;
|
|
// Force clean-up, because some packages (e.g. nock) don't do this.
|
|
request.destroy();
|
|
error = error instanceof timed_out_TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this);
|
|
this._beforeError(error);
|
|
});
|
|
this._unproxyEvents = proxyEvents(request, this, proxiedRequestEvents);
|
|
this._request = request;
|
|
this.emit('uploadProgress', this.uploadProgress);
|
|
this._sendBody();
|
|
this.emit('request', request);
|
|
}
|
|
async _asyncWrite(chunk) {
|
|
return new Promise((resolve, reject) => {
|
|
super.write(chunk, error => {
|
|
if (error) {
|
|
reject(error);
|
|
return;
|
|
}
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
_sendBody() {
|
|
// Send body
|
|
const { body } = this.options;
|
|
const currentRequest = this.redirectUrls.length === 0 ? this : this._request ?? this;
|
|
if (dist.nodeStream(body)) {
|
|
body.pipe(currentRequest);
|
|
}
|
|
else if (dist.generator(body) || dist.asyncGenerator(body)) {
|
|
(async () => {
|
|
try {
|
|
for await (const chunk of body) {
|
|
await this._asyncWrite(chunk);
|
|
}
|
|
super.end();
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
}
|
|
})();
|
|
}
|
|
else if (!dist.undefined(body)) {
|
|
this._writeRequest(body, undefined, () => { });
|
|
currentRequest.end();
|
|
}
|
|
else if (this._cannotHaveBody || this._noPipe) {
|
|
currentRequest.end();
|
|
}
|
|
}
|
|
_prepareCache(cache) {
|
|
if (!cacheableStore.has(cache)) {
|
|
cacheableStore.set(cache, new src(((requestOptions, handler) => {
|
|
const result = requestOptions._request(requestOptions, handler);
|
|
// TODO: remove this when `cacheable-request` supports async request functions.
|
|
if (dist.promise(result)) {
|
|
// We only need to implement the error handler in order to support HTTP2 caching.
|
|
// The result will be a promise anyway.
|
|
// @ts-expect-error ignore
|
|
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
result.once = (event, handler) => {
|
|
if (event === 'error') {
|
|
(async () => {
|
|
try {
|
|
await result;
|
|
}
|
|
catch (error) {
|
|
handler(error);
|
|
}
|
|
})();
|
|
}
|
|
else if (event === 'abort') {
|
|
// The empty catch is needed here in case when
|
|
// it rejects before it's `await`ed in `_makeRequest`.
|
|
(async () => {
|
|
try {
|
|
const request = (await result);
|
|
request.once('abort', handler);
|
|
}
|
|
catch { }
|
|
})();
|
|
}
|
|
else {
|
|
/* istanbul ignore next: safety check */
|
|
throw new Error(`Unknown HTTP2 promise event: ${event}`);
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
return result;
|
|
}), cache));
|
|
}
|
|
}
|
|
async _createCacheableRequest(url, options) {
|
|
return new Promise((resolve, reject) => {
|
|
// TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed
|
|
Object.assign(options, urlToOptions(url));
|
|
let request;
|
|
// TODO: Fix `cacheable-response`. This is ugly.
|
|
const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {
|
|
response._readableState.autoDestroy = false;
|
|
if (request) {
|
|
const fix = () => {
|
|
if (response.req) {
|
|
response.complete = response.req.res.complete;
|
|
}
|
|
};
|
|
response.prependOnceListener('end', fix);
|
|
fix();
|
|
(await request).emit('cacheableResponse', response);
|
|
}
|
|
resolve(response);
|
|
});
|
|
cacheRequest.once('error', reject);
|
|
cacheRequest.once('request', async (requestOrPromise) => {
|
|
request = requestOrPromise;
|
|
resolve(request);
|
|
});
|
|
});
|
|
}
|
|
async _makeRequest() {
|
|
const { options } = this;
|
|
const { headers, username, password } = options;
|
|
const cookieJar = options.cookieJar;
|
|
for (const key in headers) {
|
|
if (dist.undefined(headers[key])) {
|
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
delete headers[key];
|
|
}
|
|
else if (dist.null_(headers[key])) {
|
|
throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`);
|
|
}
|
|
}
|
|
if (options.decompress && dist.undefined(headers['accept-encoding'])) {
|
|
headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';
|
|
}
|
|
if (username || password) {
|
|
const credentials = external_node_buffer_namespaceObject.Buffer.from(`${username}:${password}`).toString('base64');
|
|
headers.authorization = `Basic ${credentials}`;
|
|
}
|
|
// Set cookies
|
|
if (cookieJar) {
|
|
const cookieString = await cookieJar.getCookieString(options.url.toString());
|
|
if (dist.nonEmptyString(cookieString)) {
|
|
headers.cookie = cookieString;
|
|
}
|
|
}
|
|
// Reset `prefixUrl`
|
|
options.prefixUrl = '';
|
|
let request;
|
|
for (const hook of options.hooks.beforeRequest) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const result = await hook(options);
|
|
if (!dist.undefined(result)) {
|
|
// @ts-expect-error Skip the type mismatch to support abstract responses
|
|
request = () => result;
|
|
break;
|
|
}
|
|
}
|
|
if (!request) {
|
|
request = options.getRequestFunction();
|
|
}
|
|
const url = options.url;
|
|
this._requestOptions = options.createNativeRequestOptions();
|
|
if (options.cache) {
|
|
this._requestOptions._request = request;
|
|
this._requestOptions.cache = options.cache;
|
|
this._prepareCache(options.cache);
|
|
}
|
|
// Cache support
|
|
const fn = options.cache ? this._createCacheableRequest : request;
|
|
try {
|
|
// We can't do `await fn(...)`,
|
|
// because stream `error` event can be emitted before `Promise.resolve()`.
|
|
let requestOrResponse = fn(url, this._requestOptions);
|
|
if (dist.promise(requestOrResponse)) {
|
|
requestOrResponse = await requestOrResponse;
|
|
}
|
|
// Fallback
|
|
if (dist.undefined(requestOrResponse)) {
|
|
requestOrResponse = options.getFallbackRequestFunction()(url, this._requestOptions);
|
|
if (dist.promise(requestOrResponse)) {
|
|
requestOrResponse = await requestOrResponse;
|
|
}
|
|
}
|
|
if (is_client_request(requestOrResponse)) {
|
|
this._onRequest(requestOrResponse);
|
|
}
|
|
else if (this.writable) {
|
|
this.once('finish', () => {
|
|
void this._onResponse(requestOrResponse);
|
|
});
|
|
this._sendBody();
|
|
}
|
|
else {
|
|
void this._onResponse(requestOrResponse);
|
|
}
|
|
}
|
|
catch (error) {
|
|
if (error instanceof src.CacheError) {
|
|
throw new CacheError(error, this);
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
async _error(error) {
|
|
try {
|
|
for (const hook of this.options.hooks.beforeError) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
error = await hook(error);
|
|
}
|
|
}
|
|
catch (error_) {
|
|
error = new RequestError(error_.message, error_, this);
|
|
}
|
|
this.destroy(error);
|
|
}
|
|
_writeRequest(chunk, encoding, callback) {
|
|
if (!this._request || this._request.destroyed) {
|
|
// Probably the `ClientRequest` instance will throw
|
|
return;
|
|
}
|
|
this._request.write(chunk, encoding, (error) => {
|
|
if (!error) {
|
|
this._uploadedSize += external_node_buffer_namespaceObject.Buffer.byteLength(chunk, encoding);
|
|
const progress = this.uploadProgress;
|
|
if (progress.percent < 1) {
|
|
this.emit('uploadProgress', progress);
|
|
}
|
|
}
|
|
callback(error);
|
|
});
|
|
}
|
|
/**
|
|
The remote IP address.
|
|
*/
|
|
get ip() {
|
|
return this.socket?.remoteAddress;
|
|
}
|
|
/**
|
|
Indicates whether the request has been aborted or not.
|
|
*/
|
|
get isAborted() {
|
|
return this._aborted;
|
|
}
|
|
get socket() {
|
|
return this._request?.socket ?? undefined;
|
|
}
|
|
/**
|
|
Progress event for downloading (receiving a response).
|
|
*/
|
|
get downloadProgress() {
|
|
let percent;
|
|
if (this._responseSize) {
|
|
percent = this._downloadedSize / this._responseSize;
|
|
}
|
|
else if (this._responseSize === this._downloadedSize) {
|
|
percent = 1;
|
|
}
|
|
else {
|
|
percent = 0;
|
|
}
|
|
return {
|
|
percent,
|
|
transferred: this._downloadedSize,
|
|
total: this._responseSize,
|
|
};
|
|
}
|
|
/**
|
|
Progress event for uploading (sending a request).
|
|
*/
|
|
get uploadProgress() {
|
|
let percent;
|
|
if (this._bodySize) {
|
|
percent = this._uploadedSize / this._bodySize;
|
|
}
|
|
else if (this._bodySize === this._uploadedSize) {
|
|
percent = 1;
|
|
}
|
|
else {
|
|
percent = 0;
|
|
}
|
|
return {
|
|
percent,
|
|
transferred: this._uploadedSize,
|
|
total: this._bodySize,
|
|
};
|
|
}
|
|
/**
|
|
The object contains the following properties:
|
|
|
|
- `start` - Time when the request started.
|
|
- `socket` - Time when a socket was assigned to the request.
|
|
- `lookup` - Time when the DNS lookup finished.
|
|
- `connect` - Time when the socket successfully connected.
|
|
- `secureConnect` - Time when the socket securely connected.
|
|
- `upload` - Time when the request finished uploading.
|
|
- `response` - Time when the request fired `response` event.
|
|
- `end` - Time when the response fired `end` event.
|
|
- `error` - Time when the request fired `error` event.
|
|
- `abort` - Time when the request fired `abort` event.
|
|
- `phases`
|
|
- `wait` - `timings.socket - timings.start`
|
|
- `dns` - `timings.lookup - timings.socket`
|
|
- `tcp` - `timings.connect - timings.lookup`
|
|
- `tls` - `timings.secureConnect - timings.connect`
|
|
- `request` - `timings.upload - (timings.secureConnect || timings.connect)`
|
|
- `firstByte` - `timings.response - timings.upload`
|
|
- `download` - `timings.end - timings.response`
|
|
- `total` - `(timings.end || timings.error || timings.abort) - timings.start`
|
|
|
|
If something has not been measured yet, it will be `undefined`.
|
|
|
|
__Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.
|
|
*/
|
|
get timings() {
|
|
return this._request?.timings;
|
|
}
|
|
/**
|
|
Whether the response was retrieved from the cache.
|
|
*/
|
|
get isFromCache() {
|
|
return this._isFromCache;
|
|
}
|
|
get reusedSocket() {
|
|
return this._request?.reusedSocket;
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/types.js
|
|
|
|
/**
|
|
An error to be thrown when the request is aborted with `.cancel()`.
|
|
*/
|
|
class types_CancelError extends RequestError {
|
|
constructor(request) {
|
|
super('Promise was canceled', {}, request);
|
|
this.name = 'CancelError';
|
|
this.code = 'ERR_CANCELED';
|
|
}
|
|
/**
|
|
Whether the promise is canceled.
|
|
*/
|
|
get isCanceled() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/index.js
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const as_promise_proxiedRequestEvents = [
|
|
'request',
|
|
'response',
|
|
'redirect',
|
|
'uploadProgress',
|
|
'downloadProgress',
|
|
];
|
|
function asPromise(firstRequest) {
|
|
let globalRequest;
|
|
let globalResponse;
|
|
let normalizedOptions;
|
|
const emitter = new external_node_events_namespaceObject.EventEmitter();
|
|
const promise = new PCancelable((resolve, reject, onCancel) => {
|
|
onCancel(() => {
|
|
globalRequest.destroy();
|
|
});
|
|
onCancel.shouldReject = false;
|
|
onCancel(() => {
|
|
reject(new types_CancelError(globalRequest));
|
|
});
|
|
const makeRequest = (retryCount) => {
|
|
// Errors when a new request is made after the promise settles.
|
|
// Used to detect a race condition.
|
|
// See https://github.com/sindresorhus/got/issues/1489
|
|
onCancel(() => { });
|
|
const request = firstRequest ?? new Request(undefined, undefined, normalizedOptions);
|
|
request.retryCount = retryCount;
|
|
request._noPipe = true;
|
|
globalRequest = request;
|
|
request.once('response', async (response) => {
|
|
// Parse body
|
|
const contentEncoding = (response.headers['content-encoding'] ?? '').toLowerCase();
|
|
const isCompressed = contentEncoding === 'gzip' || contentEncoding === 'deflate' || contentEncoding === 'br';
|
|
const { options } = request;
|
|
if (isCompressed && !options.decompress) {
|
|
response.body = response.rawBody;
|
|
}
|
|
else {
|
|
try {
|
|
response.body = parseBody(response, options.responseType, options.parseJson, options.encoding);
|
|
}
|
|
catch (error) {
|
|
// Fall back to `utf8`
|
|
response.body = response.rawBody.toString();
|
|
if (isResponseOk(response)) {
|
|
request._beforeError(error);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
const hooks = options.hooks.afterResponse;
|
|
for (const [index, hook] of hooks.entries()) {
|
|
// @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
|
|
// eslint-disable-next-line no-await-in-loop
|
|
response = await hook(response, async (updatedOptions) => {
|
|
options.merge(updatedOptions);
|
|
options.prefixUrl = '';
|
|
if (updatedOptions.url) {
|
|
options.url = updatedOptions.url;
|
|
}
|
|
// Remove any further hooks for that request, because we'll call them anyway.
|
|
// The loop continues. We don't want duplicates (asPromise recursion).
|
|
options.hooks.afterResponse = options.hooks.afterResponse.slice(0, index);
|
|
throw new RetryError(request);
|
|
});
|
|
if (!(dist.object(response) && dist.number(response.statusCode) && !dist.nullOrUndefined(response.body))) {
|
|
throw new TypeError('The `afterResponse` hook returned an invalid value');
|
|
}
|
|
}
|
|
}
|
|
catch (error) {
|
|
request._beforeError(error);
|
|
return;
|
|
}
|
|
globalResponse = response;
|
|
if (!isResponseOk(response)) {
|
|
request._beforeError(new HTTPError(response));
|
|
return;
|
|
}
|
|
request.destroy();
|
|
resolve(request.options.resolveBodyOnly ? response.body : response);
|
|
});
|
|
const onError = (error) => {
|
|
if (promise.isCanceled) {
|
|
return;
|
|
}
|
|
const { options } = request;
|
|
if (error instanceof HTTPError && !options.throwHttpErrors) {
|
|
const { response } = error;
|
|
request.destroy();
|
|
resolve(request.options.resolveBodyOnly ? response.body : response);
|
|
return;
|
|
}
|
|
reject(error);
|
|
};
|
|
request.once('error', onError);
|
|
const previousBody = request.options?.body;
|
|
request.once('retry', (newRetryCount, error) => {
|
|
firstRequest = undefined;
|
|
const newBody = request.options.body;
|
|
if (previousBody === newBody && dist.nodeStream(newBody)) {
|
|
error.message = 'Cannot retry with consumed body stream';
|
|
onError(error);
|
|
return;
|
|
}
|
|
// This is needed! We need to reuse `request.options` because they can get modified!
|
|
// For example, by calling `promise.json()`.
|
|
normalizedOptions = request.options;
|
|
makeRequest(newRetryCount);
|
|
});
|
|
proxyEvents(request, emitter, as_promise_proxiedRequestEvents);
|
|
if (dist.undefined(firstRequest)) {
|
|
void request.flush();
|
|
}
|
|
};
|
|
makeRequest(0);
|
|
});
|
|
promise.on = (event, fn) => {
|
|
emitter.on(event, fn);
|
|
return promise;
|
|
};
|
|
promise.off = (event, fn) => {
|
|
emitter.off(event, fn);
|
|
return promise;
|
|
};
|
|
const shortcut = (responseType) => {
|
|
const newPromise = (async () => {
|
|
// Wait until downloading has ended
|
|
await promise;
|
|
const { options } = globalResponse.request;
|
|
return parseBody(globalResponse, responseType, options.parseJson, options.encoding);
|
|
})();
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
|
|
return newPromise;
|
|
};
|
|
promise.json = () => {
|
|
if (globalRequest.options) {
|
|
const { headers } = globalRequest.options;
|
|
if (!globalRequest.writableFinished && !('accept' in headers)) {
|
|
headers.accept = 'application/json';
|
|
}
|
|
}
|
|
return shortcut('json');
|
|
};
|
|
promise.buffer = () => shortcut('buffer');
|
|
promise.text = () => shortcut('text');
|
|
return promise;
|
|
}
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/create.js
|
|
|
|
|
|
|
|
|
|
// The `delay` package weighs 10KB (!)
|
|
const delay = async (ms) => new Promise(resolve => {
|
|
setTimeout(resolve, ms);
|
|
});
|
|
const isGotInstance = (value) => dist.function_(value);
|
|
const aliases = [
|
|
'get',
|
|
'post',
|
|
'put',
|
|
'patch',
|
|
'head',
|
|
'delete',
|
|
];
|
|
const create = (defaults) => {
|
|
defaults = {
|
|
options: new Options(undefined, undefined, defaults.options),
|
|
handlers: [...defaults.handlers],
|
|
mutableDefaults: defaults.mutableDefaults,
|
|
};
|
|
Object.defineProperty(defaults, 'mutableDefaults', {
|
|
enumerable: true,
|
|
configurable: false,
|
|
writable: false,
|
|
});
|
|
// Got interface
|
|
const got = ((url, options, defaultOptions = defaults.options) => {
|
|
const request = new Request(url, options, defaultOptions);
|
|
let promise;
|
|
const lastHandler = (normalized) => {
|
|
// Note: `options` is `undefined` when `new Options(...)` fails
|
|
request.options = normalized;
|
|
request._noPipe = !normalized.isStream;
|
|
void request.flush();
|
|
if (normalized.isStream) {
|
|
return request;
|
|
}
|
|
if (!promise) {
|
|
promise = asPromise(request);
|
|
}
|
|
return promise;
|
|
};
|
|
let iteration = 0;
|
|
const iterateHandlers = (newOptions) => {
|
|
const handler = defaults.handlers[iteration++] ?? lastHandler;
|
|
const result = handler(newOptions, iterateHandlers);
|
|
if (dist.promise(result) && !request.options.isStream) {
|
|
if (!promise) {
|
|
promise = asPromise(request);
|
|
}
|
|
if (result !== promise) {
|
|
const descriptors = Object.getOwnPropertyDescriptors(promise);
|
|
for (const key in descriptors) {
|
|
if (key in result) {
|
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
delete descriptors[key];
|
|
}
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
Object.defineProperties(result, descriptors);
|
|
result.cancel = promise.cancel;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
return iterateHandlers(request.options);
|
|
});
|
|
got.extend = (...instancesOrOptions) => {
|
|
const options = new Options(undefined, undefined, defaults.options);
|
|
const handlers = [...defaults.handlers];
|
|
let mutableDefaults;
|
|
for (const value of instancesOrOptions) {
|
|
if (isGotInstance(value)) {
|
|
options.merge(value.defaults.options);
|
|
handlers.push(...value.defaults.handlers);
|
|
mutableDefaults = value.defaults.mutableDefaults;
|
|
}
|
|
else {
|
|
options.merge(value);
|
|
if (value.handlers) {
|
|
handlers.push(...value.handlers);
|
|
}
|
|
mutableDefaults = value.mutableDefaults;
|
|
}
|
|
}
|
|
return create({
|
|
options,
|
|
handlers,
|
|
mutableDefaults: Boolean(mutableDefaults),
|
|
});
|
|
};
|
|
// Pagination
|
|
const paginateEach = (async function* (url, options) {
|
|
let normalizedOptions = new Options(url, options, defaults.options);
|
|
normalizedOptions.resolveBodyOnly = false;
|
|
const { pagination } = normalizedOptions;
|
|
assert.function_(pagination.transform);
|
|
assert.function_(pagination.shouldContinue);
|
|
assert.function_(pagination.filter);
|
|
assert.function_(pagination.paginate);
|
|
assert.number(pagination.countLimit);
|
|
assert.number(pagination.requestLimit);
|
|
assert.number(pagination.backoff);
|
|
const allItems = [];
|
|
let { countLimit } = pagination;
|
|
let numberOfRequests = 0;
|
|
while (numberOfRequests < pagination.requestLimit) {
|
|
if (numberOfRequests !== 0) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await delay(pagination.backoff);
|
|
}
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const response = (await got(undefined, undefined, normalizedOptions));
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const parsed = await pagination.transform(response);
|
|
const currentItems = [];
|
|
assert.array(parsed);
|
|
for (const item of parsed) {
|
|
if (pagination.filter({ item, currentItems, allItems })) {
|
|
if (!pagination.shouldContinue({ item, currentItems, allItems })) {
|
|
return;
|
|
}
|
|
yield item;
|
|
if (pagination.stackAllItems) {
|
|
allItems.push(item);
|
|
}
|
|
currentItems.push(item);
|
|
if (--countLimit <= 0) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
const optionsToMerge = pagination.paginate({
|
|
response,
|
|
currentItems,
|
|
allItems,
|
|
});
|
|
if (optionsToMerge === false) {
|
|
return;
|
|
}
|
|
if (optionsToMerge === response.request.options) {
|
|
normalizedOptions = response.request.options;
|
|
}
|
|
else {
|
|
normalizedOptions.merge(optionsToMerge);
|
|
assert.any([dist.urlInstance, dist.undefined], optionsToMerge.url);
|
|
if (optionsToMerge.url !== undefined) {
|
|
normalizedOptions.prefixUrl = '';
|
|
normalizedOptions.url = optionsToMerge.url;
|
|
}
|
|
}
|
|
numberOfRequests++;
|
|
}
|
|
});
|
|
got.paginate = paginateEach;
|
|
got.paginate.all = (async (url, options) => {
|
|
const results = [];
|
|
for await (const item of paginateEach(url, options)) {
|
|
results.push(item);
|
|
}
|
|
return results;
|
|
});
|
|
// For those who like very descriptive names
|
|
got.paginate.each = paginateEach;
|
|
// Stream API
|
|
got.stream = ((url, options) => got(url, { ...options, isStream: true }));
|
|
// Shortcuts
|
|
for (const method of aliases) {
|
|
got[method] = ((url, options) => got(url, { ...options, method }));
|
|
got.stream[method] = ((url, options) => got(url, { ...options, method, isStream: true }));
|
|
}
|
|
if (!defaults.mutableDefaults) {
|
|
Object.freeze(defaults.handlers);
|
|
defaults.options.freeze();
|
|
}
|
|
Object.defineProperty(got, 'defaults', {
|
|
value: defaults,
|
|
writable: false,
|
|
configurable: false,
|
|
enumerable: true,
|
|
});
|
|
return got;
|
|
};
|
|
/* harmony default export */ const source_create = (create);
|
|
|
|
;// CONCATENATED MODULE: ./node_modules/got/dist/source/index.js
|
|
|
|
|
|
const defaults = {
|
|
options: new Options(),
|
|
handlers: [],
|
|
mutableDefaults: false,
|
|
};
|
|
const got = source_create(defaults);
|
|
/* harmony default export */ const got_dist_source = (got);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 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",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]');
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/ // 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/define property getters */
|
|
/******/ (() => {
|
|
/******/ // define getter functions for harmony exports
|
|
/******/ __nccwpck_require__.d = (exports, definition) => {
|
|
/******/ for(var key in definition) {
|
|
/******/ if(__nccwpck_require__.o(definition, key) && !__nccwpck_require__.o(exports, key)) {
|
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
/******/ }
|
|
/******/ }
|
|
/******/ };
|
|
/******/ })();
|
|
/******/
|
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
/******/ (() => {
|
|
/******/ __nccwpck_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
/******/ })();
|
|
/******/
|
|
/******/ /* webpack/runtime/make namespace object */
|
|
/******/ (() => {
|
|
/******/ // define __esModule on exports
|
|
/******/ __nccwpck_require__.r = (exports) => {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/ })();
|
|
/******/
|
|
/******/ /* webpack/runtime/compat */
|
|
/******/
|
|
/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
|
|
/******/
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
/******/ var __webpack_exports__ = __nccwpck_require__(3109);
|
|
/******/ module.exports = __webpack_exports__;
|
|
/******/
|
|
/******/ })()
|
|
;
|
|
//# sourceMappingURL=index.js.map |